意图:为其他对象提供一种代理以控制对这个对象的访问。
主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。
示例场景:去移动营业厅充话费,但是在代理处必须要一次性充值大于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元