码迷,mamicode.com
首页 > 其他好文 > 详细

代理模式

时间:2019-07-21 01:06:03      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:动态代理   sign   接口   this   public   lib   col   扩展   family   

一、代理模式的基本介绍

  1. 代理模式:为一个对象提供一个替身,以控制对这个对象的访问,即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上增强额外的功能操作,即扩展目标对象的功能。
  2. 被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象
  3. 代理模式有不同的形式,主要有三种:静态代理、动态代理和Cglib代理

 

 二.静态代理:

  1. 创建ITeacherDao接口
    package com.design.design.proxy.staticproxy;
    
    /**
     * @author: GuanBin
     * @date: Created in 下午11:52 2019/7/20
     */
    public interface ITeacherDao {
        /**
         * 授课的方法
         */
        void teach();
    }

     

  2. TeacherDao、TeacherDaoProxy都要实现IITeacherDao接口
    package com.design.design.proxy.staticproxy;
    
    /**
     * @author: GuanBin
     * @date: Created in 下午11:56 2019/7/20
     */
    public class TeacherDao implements ITeacherDao {
        @Override
        public void teach() {
    
            System.out.println("*****老是正在授课*****");
        }
    }

     

    3.被代理对象传入代理类的构造方法中,在代理类中实现的teach方法中,除了执行被代理类的teach方法外,还可以执行其他的业务逻辑操作
    package com.design.design.proxy.staticproxy;
    
    /**
     * @author: GuanBin
     * @date: Created in 下午11:58 2019/7/20
     */
    public class TeacherDaoProxy implements ITeacherDao {
    
        private ITeacherDao target;
    
    
        public TeacherDaoProxy (ITeacherDao target) {
            this.target=target;
        }
    
        @Override
        public void teach() {
            System.out.println("开始代理");
            target.teach();
            System.out.println("提交代理");
    
        }
    }

    4.Client中获取代理对象,并执行被代理类的teach方法

    package com.design.design.proxy.staticproxy;
    
    /**
     * @author: GuanBin
     * @date: Created in 上午12:05 2019/7/21
     */
    public class Client {
    
        public static void main(String[] args) {
    
            //创建目标对象(被代理对象)
            TeacherDao teacherDao = new TeacherDao();
    
            //创建代理对象,同时将被代理对象传递给代理对象
            TeacherDaoProxy teacherDaoProxy = new TeacherDaoProxy(teacherDao);
    
    
            //通过代理对象,调用到被代理对象的方法
            //即:执行的是代理对象的方法,代理对象再去调用目标对象的方法
            teacherDaoProxy.teach();
    
        }
    }

     

代理模式

标签:动态代理   sign   接口   this   public   lib   col   扩展   family   

原文地址:https://www.cnblogs.com/guanbin-529/p/11219944.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!