【设计模式】代理模式

来源:互联网 发布:辐射4配置文件优化 编辑:程序博客网 时间:2024/06/18 09:46

代理模式在所需对象和用户代码之间增加了一层对象,这个对象被称为代理。用户代码只需要直接操作代理对象即可。代理模式的UML图如下:


著名的代理模式的例子就是引用计数指针对象,它使得我们对真实对象的操作都需要经过引用计数指针对象。下面是用C++写的一个运用了代理模式的例子。

#include <iostream>#include <string> using namespace std; // 作为接口的抽象基类class Subject {public:    virtual void DoAction() = 0;}; // 被代理对象class RealSubject : public Subject {public:    RealSubject(const string &str) : info(str)    {}     // 被代理对象所做的动作    void DoAction()    {        cout << info << endl;    } private:    string info;    // 被代理对象需要输出的内容}; // 作为代理的对象class Proxy : public Subject {public:    Proxy(const string &str = "") : realSubject(str)    {}     void DoAction()    {        realSubject.DoAction(); // 代理所做的动作实际上是被代理对象所需要做的事情    } private:    RealSubject realSubject;    // 保存需要被代理的对象}; int main(){    Proxy proxy("test");     proxy.DoAction();   // 用户代码只和代理有联系     system("pause");    return 0;}

运行结果:


上面的例子展示了代理模式的基本框架。用户代码通过代理类Proxy而不是RealSubject类来输出相关信息。根据使用的场合可以把代理模式分成四类:

  1. 远程代理:为一个不在同一地址空间的对象提供局部代表。

  2. 虚拟代理:创建对象开销很大时,可用代理暂时代替真实对象。

  3. 安全代理:控制真实对象访问时的权限。

  4. 智能指引:当调用真实对象时,代理处理另外一些事情。智能指针就是这种类型的代理模式。

​参考:

《大话设计模式》第7章

0 0
原创粉丝点击