本篇介绍了代理模式及相关的面向对象设计原则。代理模式为其他对象提供一种替身或占位符(代理)以控制对这个对象的访问。
代理模式顾名思义,为某一个对象提供一个代理,从而使客户想要访问该对象的时候与代理进行沟通,而不是直接与该对象发生交互。这在很多时候是很重要的,比如某些系统需要安全控制或者直接访问对象的开销很大时,就需要代理模式来控制对象的访问。
我们可以让代理对象和实际对象继承于同一个基类,这样在需要访问实际对象的时候就可以使用代理对象来替代了。代理模式的类图如下:
框架代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| class ISubject { public: virtual void process(); };
class RealSubject : public ISubject { public: virtual void process() { } };
class SubjectProxy: public ISubject { public: virtual void process() { } };
class ClientApp { private: ISubject* subject; public: ClientApp() { subject = new SubjectProxy(); } void DoTask() { subject->process(); } };
|
具体代理模式的实现方式差别很大,有些可能对单个对象做细粒度的控制,有些可能对组件模块提供抽象代理层,在架构层次对对象做代理。