为还有一个对象提供一个替身或占位符以控制对这个对象的訪问。
代理模式的组成:
主题接口(Subject):提取真正主题与代理的公共方法,让使用真正主题的地方也能用代理取代。
真正主题(RealSubject):真正处理请求的类。
代理(Proxy):真正主题的代理类,请求方通过调用代理对象间接调用真正主题。
代理模式的简单样例:
(主题接口类)Subject.java
package xu.neng.Proxy;
public interface Subject {
public void request();
}
package xu.neng.Proxy;
public class RealSubject implements Subject{
@Override
public void request() {
System.out.println("竟敢调用我!!!");
}
}
package xu.neng.Proxy;
//必须和被代理对象继承统一接口
public class Proxy implements Subject {
RealSubject realSubject;
public Proxy() {
this.realSubject = new RealSubject();
}
// 从构造方法中传入被代理的对象
public Proxy(RealSubject realSubject) {
this.realSubject = realSubject;
}
// 调用方法
@Override
public void request() {
realSubject.request();
}
}
package xu.neng.Proxy;
/**
* 測试代理模式。(相当于UML图中的Client)
*
* @author neng
*
*/
public class Test {
public static void main(String[] args) {
// 我想调用RealSubject出来玩玩
Proxy proxy = new Proxy(new RealSubject());
proxy.request();
}
}
代理模式的应用:
iOS开发中经常使用。代理模式更像是一种思想,通过中间手段来控制正真对象的訪问,同一时候还能够做一些包装。
防火墙代理:控制网络资源的訪问、保护主题免于坏客户的侵害。
智能引用代理:当主题被引用时,能够进行额外的动作。如进行引用计数等。
缓存代理:为开销大的运算结果提供暂时存储。同意多个客户共享结果,以降低计算或网络延迟。(本质上还是额外做其它事情)
同步代理:多线程时,为主题提供安全的訪问。
写入时复制代理:用来控制(延迟)对象的复制,直到客户真的须要为止。
參考一篇非常有意思的文章:http://yangguangfu.iteye.com/blog/815787
转载请注明出处:http://blog.csdn.net/xn4545945
设计模式----代理模式(Proxy),布布扣,bubuko.com
原文:http://www.cnblogs.com/mengfanrong/p/3796829.html