java设计模式笔记

设计模式六--代理模式

2018-09-26  本文已影响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):当一个对象被访问的时候提供额外的操作,比如记录流量和访问次数

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

上一篇 下一篇

猜你喜欢

热点阅读