美文网首页java设计模式笔记
设计模式六--代理模式

设计模式六--代理模式

作者: 朽木亦自雕 | 来源:发表于2018-09-26 20:48 被阅读45次

    定义

    为其他对象提供一种代理以控制这个对象的访问

    代理模式中的角色

    1:抽象主题角色(Subject)
    该角色是真是主题和代理主题的共同接口,以便在任何地方都能够使用代理主题

    public interface Subject{
      //定义一个请求方法
      public void request();
    }
    

    2:代理主题角色(ProxySubject)
    该角色负责控制对真是主题的引用,负责在需要的时候创建或者删除真是主题对象,并且在真是主题角色处理完毕前后做预先和善后的处理

    public class ProxySubject implements Subject{
        
      private Subject subject;
      
      public ProxySubject (Subject subject){
        this.subject = subject();
      }
    
      @override
      public void request(){
        this.beforeRequest();
        subject.request();
        this.afterReqest();  
      }
    
      private void beforeRequest(){
        //预先处理
        System.out.println("this is do before……")  
      }
      
      private void afterRequest(){
        //善后处理
        System.out.println("this is do after……") 
      }
     
    }
    
    

    3:真是主题角色(RealSubject)
    该角色也叫被委托角色,是业务逻辑的具体执行者

    public class RealSubject implements Subject{
    
      @override
      public void request(){
        System.out.println(" i am real request method……")
      }
    }
    

    调用示例

    public class ProxyTest{
      public static void main(String [] args){
        ProxySubject subject = new ProxySubject(new RealSubject());  
        subject.request();
      }
    }
    

    优点

    1:职责清晰,真实角色不用负责本职工作之外的事情
    2:高扩展性,只要实现了接口,代理类不用任何修改就可以代理任何真实角色
    3:智能化,代理类在运行的时候才确定需要代理的真实主题

    使用场景

    经典应用场景就是Spring的AOP,就是代理模式,还有一些事务处理方面

    代理模式分类

    (按照使用目的划分)
    1:远程代理(Remote):为一个位于不同地址空间的对象提供一个局部代表对象
    2:虚拟代理(Virtual):需要创建消耗资源过多的对象的时候,可以先创建代理对象,延缓真实对象的创建
    3:保护代理(Protect Or Access):控制一个对象的访问
    4:缓存代理(Cache):提供临时的存储空间,便于多个客户端共享这个对象
    5:同步代理(Synchronization):使几个对象能够同时使用一个对象并且没有冲突
    6:智能引用(Smart Reference):当一个对象被访问的时候提供额外的操作,比如记录流量和访问次数

    参考资料:设计模式之禅(二)

    相关文章

      网友评论

        本文标题:设计模式六--代理模式

        本文链接:https://www.haomeiwen.com/subject/htijoftx.html