代理模式
为其他对象提供一种代理,以达到对这个对象的访问控制。
可以理解为一个客户不想或者不能直接访问一个对象,可以通过代理来作为中介来实现对这个对象的访问。
结构图
AbstractObject:
定义了ProxyObject和RealObject的公用的接口,这样在任何使用RealObject的地方都可以用ProxyObject。
ProxyObject:
保存了RealObject的一个引用,通过这个引用用来替代实体。
RealObject:
定义了ProxyObject所代表的真实实体。
静态代理实现
共用接口
public abstract AbstractObject{
public abstract void operation();
}
真实实体
public class RealObject extends AbstractObject {
public void operation() {
System.out.println("真实操作");
}
}
代理类
public class ProxyObject extends AbstractObject {
private RealObject mRealObject;
public ProxyObject (RealObject realObject) {
mRealObject = realObject ;
}
public void operation() {
realObject.operation();
}
}
客户端
public static void main(String[] args) {
RealObject object = new RealObject();
ProxyObject proxy = new ProxyObject(object);
proxy.operation();
}
通过上面简单的方式就能实现(静态)代理模式,真实的对象是存在的,作为代理对象的内部属性。
但是在实际的应用中,一个真实的实体就得对应一个代理类,这样会导致使用很多代理类;此外如果我们不知道真实的实体,那要怎么使用代理类?
以上的问题可以通过动态代理来实现,请见下篇文章。