设计模式-代理模式,介绍代理模式,及代码实现。
简介
代理模式,为其他对象提供一种代理以控制这个对象的访问。
应用场景
- 远程代理:为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。
- 虚拟代理:根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象,这样可以达到性能最优化,比如在打开一个很大的HTML网页时,此时看到的是所有文字,图片确是一张张虚拟的图片框,需要点击才会加载。
- 安全代理:用来控制真实对象访问时的权限。
- 智能指引:当调用真实对象时,代理处理另外的事情,如计算真实对象引用的此时,当没有引用时释放它,或当第一次引用一个持久对象时,将它装入内存,或在访问一个对象时检查是否上锁;他们都是通过代理在访问一个对象时附加处理一些别的事情。
角色
- 公用接口:定义真实实体类与代理类共用的接口
- 真实的实体类,被代理的对象
- 代理类
代码实现
公用接口
1 2 3 4 5 6 7 8 9 10
|
public interface Subject {
public void request(); }
|
真实实体类
1 2 3 4 5 6 7 8 9 10 11 12 13
|
public class RealSubject implements Subject {
@Override public void request() { System.out.println("真实对象的请求"); }
}
|
代理类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
public class Proxy implements Subject {
Subject subject;
public Proxy() { subject = new RealSubject(); }
@Override public void request() { subject.request(); }
}
|
客户端调用
1 2 3 4 5 6 7 8 9 10 11 12
|
public class ProxyClient {
public static void main(String[] args) { Proxy proxy = new Proxy(); proxy.request(); } }
|