代理模式一般涉及到的角色有
-抽象角色:声明真实对象和代理对象的共同接口
-代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能替代真实对象相同的接口以便在任何时刻都能替代真实对象。同时,代理对象可以再执行真实对象操作时,附加其他的操作,相当于对象真实对象进行封装
-真实角色:代理角色代表的真实对象,是我们最终要应用的对象
下面是例子代码:
(1)抽象角色:
package proxy; public abstract class Subject { public abstract void request(); }
(2)代理角色:
package proxy; public class ProxySubject extends Subject { private RealSubject realSubject;//代理角色内部引用了真实角色 public void request() { this.prerequest(); if(null == realSubject){ realSubject = new RealSubject(); } realSubject.request(); this.postRequest(); } private void prerequest(){ System.out.println("pre request"); } private void postRequest(){ System.out.println("post request"); } }
(3)真实角色:
package proxy; public class RealSubject extends Subject{ public void request(){ System.out.println("From real subject."); } }