结构型模式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;
};