当客户端代码直接访问对象存在某些问题时,我们会考虑在对象和客户端代码之间加一个访问层,也就是代理模式。
代理模式为其他对象提供一种代理以控制对这个对象的访问。
来看UML图:

代理类与真实类共同实现了相同的接口,这样做可以控制特定方法的输入输出一致。
代理类包含了真实类作为其成员变量。
来看代码:
public interface ISubject {
public void sayHello();
}
ISubject接口。
public class RealSubject implements ISubject {
@Override
public void sayHello() {
// TODO Auto-generated method stub
System.out.println("Hello!");
}
}
真实类实现了sayHello方法。
public class Proxy implements ISubject {
private RealSubject real = null;
@Override
public void sayHello() {
// TODO Auto-generated method stub
if(real == null){
real = new RealSubject();
}
real.sayHello();
}
}
代理类内部包含真实类对象,显式调用真实类对象的方法。
public class ProxyDemo {
public static void main(String[] args) {
Proxy proxy = new Proxy();
proxy.sayHello();
}
}