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

相关文章:

  • 2022-12-23
  • 2021-11-26
  • 2022-12-23
  • 2022-12-23
  • 2021-11-13
  • 2022-01-03
  • 2021-12-20
  • 2021-06-13
猜你喜欢
  • 2022-01-18
  • 2021-05-30
  • 2021-11-19
  • 2021-09-18
  • 2021-07-05
相关资源
相似解决方案