代理模式

Posted guanbin-529

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代理模式相关的知识,希望对你有一定的参考价值。

一、代理模式的基本介绍

  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();
    
        
    

     

以上是关于代理模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式代理模式 ( 代理模式结构 | 客户端 | 主题对象 | 被代理对象 | 代理对象 )

代理的模式和原理(代理的模式有几种)

设计模式——代理模式

设计模式-代理模式

设计模式 结构型模式 -- 代理模式(动态代理(CGLIB动态代理)三种代理的对比(静态代理动态代理(JDK代理和CGLIB代理)优缺点使用场景))

代理模式 (ProxyPattern)