C++代理模式(Proxy)

 C++
时间:

使用场景

按职责来划分,通常有以下使用场景:

远程代理。

虚拟代理。

Copy-on-Write 代理。

保护(Protect or Access)代理。

Cache代理。

防火墙(Firewall)代理。

同步化(Synchronization)代理。

智能引用(Smart Reference)代理。

创建开销大的对象时候,比如显示一幅大的图片,我们将这个创建的过程交给代理去完成,GoF称之为虚代理。

为网络上的对象创建一个局部的本地代理,比如要操作一个网络上的一个对象(网络性能不好的时候,问题尤其突出),我们将这个操纵的过程交给一个代理去完成,GoF称之为远程代理(Remote Proxy)

对对象进行控制访问的时候,比如在Jive论坛中不同权限的用户(如管理员,普通用户等)将获得不同层次的操作权限,我们将这个工作交给一个代理去完成,GoF称之为保护代理(Protection Proxy)

Proxy

可以看到p的Request请求实际交给了sub来实际执行

#include<iostream>

using namespace std;

class Subject
{
    public:
        virtual ~Subject() {}
        virtual void Request() = 0;
    protected:
        Subject() {}
    private:
};

class ConcreteSubject : public Subject
{
    public:
        ConcreteSubject() {}
        ~ConcreteSubject() {}
        void Request()
        {
            cout << "ConcreteSubject...... request......" << endl;
        }
    protected:
    private:
};

class Proxy
{
    public:
        Proxy() {}
        Proxy(Subject* sub) { _sub = sub; }
        ~Proxy() { delete _sub; }
        void Request() 
        { 
            cout << "Proxy request......" << endl;
            _sub->Request();
        }
    protected:
    private:
        Subject* _sub;
};

int main(int argc, char* argv[])
{
    Subject* sub = new ConcreteSubject();
    Proxy* p = new Proxy(sub);
    p->Request();
    return 0;
}

0 评论