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 的类, 都可以叫做代理。