动机
- 在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、系统结构带来很多麻烦
定义
- 为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问
要点
- 增加一层间接层是软件系统中对许多复杂问题的一种常见解决方法。
示例
#include <cstdio>
class CBase
{
public:
virtual ~CBase(){}
virtual void Print() = 0;
};
class CChild : public CBase
{
public:
void Print()
{
printf("Child\n");
}
};
//代理类
class CProxy : public CBase
{
public:
void Set(CBase* pBase) { pBase_ = pBase; }
//对被访问的对象提供间接层,可以添加安全控制等操作
void Print()
{
printf("Deal Proxy\n");
pBase_->Print();
}
private:
CBase* pBase_;
};
int main()
{
CChild Child;
CProxy Proxy;
Proxy.Set(&Child);
Proxy.Print();
/*
Deal Proxy
Child
*/
return 0;
}
https://www.bilibili.com/video/av24176315/?p=15
网友评论