概述
为其他对象提供一种代理以控制对这个对象的访问。
适用性
1.远程代理(RemoteProxy)为一个对象在不同的地址空间提供局部代表。 2.虚代理(VirtualProxy)根据需要创建开销很大的对象。 3.保护代理(ProtectionProxy)控制对原始对象的访问。 4.智能指引(SmartReference)取代了简单的指针,它在访问对象时执行一些附加操作。
// 代理模式
#include <iostream>
using namespace std;
class Object
{
public:
virtual ~Object(){};
virtual void action() = 0;
};
class ObjImpl : public Object
{
public:
void action() override
{
cout << "========" << endl;
cout << "被代理的类执行函数" << endl;
cout << "========" << endl;
}
};
class ProxyObj
{
public:
ProxyObj()
{
cout << "代理类创建" << endl;
pObj = new ObjImpl();
}
~ProxyObj()
{
if (pObj)
{
delete pObj;
pObj = nullptr;
}
}
void action()
{
cout << "代理开始" << endl;
pObj->action();
cout << "代理结束" << endl;
}
private:
Object* pObj;
};
int main(int argc, char const *argv[])
{
ProxyObj obj;
cout << "**********" << endl;
obj.action();
return 0;
}
运行结果: