第7章 为别人做嫁衣——代理模式
定义
代理模式,为其他对象提供一种代理以控制对这个对象的访问。
解释
代理对象和真实对象具有相同名字的接口(两者可以继承一个共同的抽象类),不同点在于:真实对象的接口做真正的事情,而代理对象的接口调用真正对象的接口,只负责获取/传送代理结果(代理对象保存有真实对象的引用控制其具体访问,客户端只调用代理对象间接访问真实对象)。
主要用于:远程访问(不同地址的远程对象,通过代理调用,隐藏了不同地址空间的问题),虚拟代理(比如网页加载图像等大量数据之前,先显示代理的框架以提高响应度),安全控制,智能指针等。
实现
- Subject: 定义了真正类和代理类的共同接口(request())。以便任何时候能通过代理的接口实现调用到同样类的接口实现。
- RealSubject: 定义了真正类,实现相应的接口(request()),真正做事情的类。
- Proxy: 定义了代理类,代理类保存一个RealSubject的对象引用,其接口request()通过引用调用到实际类的request(),实现代理替换实际类的效果。
- Client: 创建代理类,通过代理类发送请求(不用关注实际类是什么)
实现类图:
客户端代码
总结
代理模式通过代理对象间接访问真实对象,也可在代理中控制真实对象的访问。这使得在访问对象时引入了一种间接性,通过间接性附加多种用途。