意图:为其他对象提供一种代理以控制对这个对象的访问。
主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。
示例场景:去移动营业厅充话费,但是在代理处必须要一次性充值大于50元,此时这就是代理。代理可以做任何你想做的事,拓展性变强。
代码如下:
主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。
示例场景:去移动营业厅充话费,但是在代理处必须要一次性充值大于50元,此时这就是代理。代理可以做任何你想做的事,拓展性变强。
代码如下:
#include<iostream>
class Business
{
public:
Business(){}
virtual ~Business(){}
virtual bool Recharge(int)=0;
};
class CMCC:public Business
{
public:
CMCC(){}
~CMCC(){}
bool Recharge(int money)
{
std::cout<<"充值"<<money<<"元"<<std::endl;
return true;
}
};
class CMCCProxy:public Business
{
public:
CMCCProxy(){m_cmcc=NULL;}
~CMCCProxy()
{
if(m_cmcc)
delete m_cmcc;
}
bool Recharge(int money)
{
if(money<50)
{
std::cout<<"请充值大于50元!"<<std::endl;
return false;
}
else
{
m_cmcc=new CMCC;
m_cmcc->Recharge(money);
return true;
}
}
private:
CMCC *m_cmcc;
};
int main()
{
Business * p = new CMCCProxy;
p->Recharge(30);
p->Recharge(60);
}
输出:
请充值大于50元!
充值60元