设计模式:Proxy
目录
[显示]
1.摘要
Proxy模式为其他对象提供一种代理,以控制对这个对象的访问。它可以提供引用计数、延迟加载、访问控制等特性。
2. 针对问题
假如说我需要对某个类型的调用做一些控制,例如载入一副图片的步骤可以分为三步:
1 2 3 |
Image image=new Image(); image.load("filename"); image.draw(); |
假如说load这一步需要的时间很长,而draw不一定在什么时候调用(比如word文档中的图片要浏览到图片位置时才显示),那么自然会考虑可以在不改变程序结构的前提下把load这一步推迟到draw调用,以节约初始化的时间。这种情况适合于Proxy模式。
3. 介绍
为其他对象提供一种代理以控制对这个对象的访问。
Proxy模式可以分为以下4类:
1、远程代理:为一个对象在不同的地址空间提供局部代表。
2、虚代理:延迟加载大对象。
3、保护代理:控制对原始对象的访问。
4、智能引用:引用计数、单例、锁等。
4. 实现
Proxy模式的静态图如下:
其中:
1、Proxy需要提供与Subject相同的接口。
2、C++中可以重载->操作符以实现对RealSubject的访问,例如:
1 2 3 4 5 6 7 8 9 10 11 12 |
class ImagePtr { public: virtual Image* operator->(); } Image* ImagePtr::operator->() { return pointer of image; } ImagePtr ptr; ptr->draw(); |
3、Java中可以使用InvocationHandler实现动态代理类。
5. 特点
1、Proxy模式关注对原有对象访问的控制,并不会改变接口的声明。
2、Proxy模式与原有对象是平级的,不会增加接口的层次。
6. 相关文章
7. 参考文章
- 《设计模式_可复用面向对象软件的基础》
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可,转载请注明作者及原网址。
抱歉,暂停评论。