Design Pattern --- Proxy

class Subject
{
public:
    // Interface.
    virtual void Request() = 0;
};
class RealSubject : public Subject
{
public:
    // Interface.
    virtual void Request() override { cout <<"RealSubject::Request()." <<endl; }
};

class Proxy : public Subject
{
    // data.
    Subject &m_subject;

public:
    Proxy(Subject &subject) : m_subject(subject) {}
public:
    // Interface.
    virtual void Request() override 
    {
        // Some prepartions.
        m_subject.Request();
        // Some other operations.
    }
};

作为代理, Proxy 类比需要和 Subject 类保持一样的接口。这样才能让 Proxy 的对象完全代理 Subject 子类对象。
代理可以控制 Subject 的访问权限; 可以负责 Subject 的创建与删除; 或者隐藏不同地址空间的对象等等。
狭义上讲, 只要和 Proxy 与 Subject 保持一样的接口, 都可以称作 Subject 的代理, 只是不同代理的目的不一样。
广义上讲, 只要是对某个 Subject 进行的包装, 目的是替代这个 Subject 的类, 都可以叫做代理。

posted @ 2013-01-31 20:46  walfud  阅读(117)  评论(0编辑  收藏  举报