设计模式六--代理模式
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):当一个对象被访问的时候提供额外的操作,比如记录流量和访问次数
参考资料:设计模式之禅(二)