结构型模式6-代理模式

结构型模式6-代理模式

代理模式Proxy

意图

为其他对象提供一种代理,以控制对这个对象的访问。

问题思考

考虑一个rpc服务。或者运行时权限检查,有权限则允许调用某些操作。可以参考Java中的Proxy

适用性

  • 远程代理(Remote Proxy) 为一个对象在不同地址空间提供局部代表
  • 虚代理(Virtual Proxy) 根据需要创建开销很大的对象
  • 保护代理(Protection Proxy) 控制对原始对象的访问
  • 智能指针(Smart Pointer) 取代简单的指针

类图

proxy

实现

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

class RealSubject : public Subject {
public:
    void Request() override {
        // do some stuff
    }
};

class Proxy : public Subject {
public:
    Proxy(Subject *subject) { mSubject = subject; }

    void Request() override {
        // do some stufll. like check permission
        mSubject->Request();    // call this if necessary
    }

private:
    Subject *mSubject = nullptr;
};

你可能感兴趣的:(结构型模式6-代理模式)