J2EE设计模式--Proxy的几点困惑
Proxy(代理)对象结构型模式,其意图是,为其他对象提供一种代理以控制对这个对象的访问。
Adapter(适配器)模式是为它所适配的对象提供一个不同的接口,而Proxy(代理)提供与它的实体相同的接口,Decorator(装饰)则是为对象添加一个或多个功能。
源码说明如下:
Proxy.java 保存一个引用使得代理可以访问实体
public class Proxy implements Subject {
public void request() {
if (lnkRealSubject == null)
lnkRealSubject = new RealSubject();
lnkRealSubject.request();
}
private RealSubject lnkRealSubject;
}
Subject.java 定义RealSubject和Proxy的共用接口,这样就使得在任何使用RealSubject的地方都可以使用Proxy
public interface Subject {
public void request();
}
RealSubjcet.java Proxy所代表的实体
public class RealSubject implements Subject {
public void request() {
System.out.println("RealSubject.request() executing");
}
}
测试程序,Client.java
public class Client {
public static void main(Stringp[] args) {
Proxy theProxy = new Proxy();
theProxy.request();
}
}
Proxy模式在访问对象时引入了一定程度的间接性,根据代理的类型,间接性有多种用途,如下:
1) Remote Proxy 可以隐藏一个对象存在于不同地址空间的事实;
2) Virtual Proxy 可以进行优化,例如在显示包含大图片的文档时,在初始时可以不显示图片,只显示图片的大小,根据需要再创建图片对象,显示图片;
3) Protection Proxies 可以在访问一个对象是附加一些内务处理,如权限验证等
4) Smart Reference 可以智能地管理代理引用的对象,如对引用的对象记数,没有引用时释放对象;为引用对象加锁等;