代理,顾名思义,就是有个中间人,网上看到别人举的例子,印象深刻,拿过来来分享,就是,你来北京租房,你怎么租?
第一反应,当然是找个中介啊,因为他手里有房源消息。从这个代理可获得,租房价钱信息。
如果,你觉得还不够好,那就是。。。如果你遇到了官司,你必须请个律师,因为律师毕竟专业更懂法律,更能表达你的意思,其中,律师的角色,就是你的代理。
代理有什么作用?
代理可以起到设置权限,保护对象的作用。因为任何时候你需要访问这个对象,都需要通过代理这个环节。
代理模式中的“代理商”要想实现代理任务,就必须和被代理的“厂商”使用共同的接口(你可以想象为产品)。所以自然而然你会想到在java中使用一个抽象类或者接口(推荐)来实现这个共同的接口。于是代理模式就有三个角色组成了:
1.抽象主题角色:声明了真实主题和代理主题的共同接口。
2.代理主题角色:内部包含对真实主题的引用,并且提供和真实主题角色相同的接口。
3.真实主题角色:定义真实的对象。
代理模式和刚才的装饰模式很类似。为什么?
一个是装饰完了,直接给客户,而代理完了,还得有代理商这关,因为代理商还有个卖不卖给你的问题,是他对产品的控制权限。
表现在代码里面,就是装饰模式,直接把原类传进去的,而代理模式则是在里面new出来的,因此他内部有类的完全控制权。
代理模式在很多情况下都非常有用,特别是你想强行控制一个对象的时候,比如:延迟加载,监视状态变更的方法等等
最后看看代理模式的代码,确实很简单,当然代理模式应用很广泛,别的以后遇到再说。
public class Proxy implements Sourceable {
private Source source;
public Proxy(){
super();
this.source = new Source(); //请注意这里还装饰模式的不同,那个是直接传入,这里new
}
@Override
public void method() {
before();
source.method();
atfer();
}
private void atfer() {
System.out.println("after proxy!");
}
private void before() {
System.out.println("before proxy!");
}
}