概述
关于代理模式,很好理解。比如你买演唱会的票,自己很难买到,只能去找黄牛,那么黄牛就是代理(非官方)卖火车票的。
在开发中,代理模式很常见。一个类的对象不直接生成,通过代理类去帮你生成对象。那么通过代理生成的对像的功能可能会有增强。一般我们想让一个对象的功能增强,就可以使用代理模式。
什么是代理模式
“Provide a surrogate or placeholder for another object to control access to it.(为其他对象提供一种代理以控制对这个对象的访问。)
”
我认为代理模式有几个很有用的作用:
“”
能保护目标对象,我们不直接访问目标对象,而是通过代理对象访问
代理对象可以扩展目标对象的功能
客户端不能直接访问目标对象,只能通过代理对象访问,势必会降低访问速度。同时增加了代理对象,系统的复杂度也增加了。
那么代理模式有哪些要素组成呢?
“”
抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。
真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。
代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。
这几种要素关系如下图:
代理模式
代码实现
下面是代码:
Subject
public interface Subject {
void request();
}
Proxy
public class Proxy implements Subject {
private RealSubject realSubject;
@Override
public void request() {
if (realSubject == null) {
realSubject = new RealSubject();
}
preRequest();
realSubject.request();
postRequest();
}
public void preRequest() {
System.out.println("访问真实主题之前的预处理!!!");
}
public void postRequest() {
System.out.println("访问真实主题之后的后续处理!!!");
}
}
RealSubject
public class RealSubject implements Subject {
@Override
public void request() {
System.out.println("真实类访问方法!!!!");
}
}
测试如下:
public class ProxyTest {
public static void main(String[] args){
Proxy proxy = new Proxy();
proxy.request();
}
}
访问真实主题之前的预处理!!!
真实类访问方法!!!!
访问真实主题之后的后续处理!!!
关于动态代理
代理模式的比较高级的应用,可以参考我的这篇文章:
面试必问的动态代理
最后
以上就是彪壮溪流为你收集整理的设计模式6之代理模式的全部内容,希望文章能够帮你解决设计模式6之代理模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复