代理模式:为其他对象提供一种代理以控制对这个对象的访问。
1 /** 2 * 定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy. 3 * @author Monica 4 * 5 */ 6 abstract class Subject { 7 public abstract void Request(); 8 } 9 10 11 /** 12 * 定义Proxy所代表的真实实体 13 * @author Administrator 14 * 15 */ 16 public class RealSubject extends Subject { 17 18 @Override 19 public void Request() { 20 System.out.println("真实的请求"); 21 } 22 23 } 24 25 26 /** 27 * 保存一个引用使用代理可以访问实体,并提供一个与Subject的接口相同的接口, 28 * 这样代理就可以用来替代实体。 29 * @author Administrator 30 * 31 */ 32 public class Proxy extends Subject{ 33 private RealSubject realSubject; 34 35 @Override 36 public void Request() { 37 if(realSubject == null) { 38 realSubject = new RealSubject(); 39 } 40 realSubject.Request(); 41 } 42 43 }
调用:
public static void main(String[] args) { Proxy proxy = new Proxy(); proxy.Request(); }
代理模式应用:
1 -- 远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
2 -- 虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
3 -- 安全代理,用来控制真实对象访问时的权限。
4 -- 智能指引,是指当调用真实的对象时,代理处理另外一些事。