当客户端代码直接访问对象存在某些问题时,我们会考虑在对象和客户端代码之间加一个访问层,也就是代理模式。
代理模式为其他对象提供一种代理以控制对这个对象的访问。
来看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(); } }