介绍
为其它对象提供一种代理以控制对这个对象的访问, 如只有当真的要访问这个对象的时候才进行创建并初始化, 在者之前可以利用该对象的代理, 这样就省去了创建和初始化的消耗;
适用性
- 远程代理Remote Proxy, 为对象在不同的地址空间提供局部代表;
- 虚代理Virtual Proxy, 即为对象的使用这占时提供一个虚拟的对象, 只当正在需求的时候才初始化对象;
- 保护代理Protection Proxy, 控制对原始对象的权限访问;
- 智能引用Smart Reference;
例子
小明与小梦打算买房, 为了方便他们委托一家中介帮忙寻找房源, 中介会去房地产公司一买房的名义去看房, 只有等房子真正被小明确认后才会把钱给房地产方;
代码
// 抽象买家 class Buyer { public: virtual void LookForHouse() = 0; virtual void Negotiate() = 0; virtual void PayMoney() = 0; }; // 真正买家 class RealBuyer : public Buyer { public: RealBuyer(string str):buyername(str){}; virtual void LookForHouse() { cout<<buyername<<" wants to buy a house"<<endl; } virtual void Negotiate() { cout<<buyername<<" the requirement"<<endl; } virtual void PayMoney() { cout<<buyername<<" payed $10000000 for buying the house"<<endl; } private: string buyername; }; // proxy class BuyProxy : public Buyer { public: BuyProxy(Buyer* b):mBuyer(b){}; virtual void LookForHouse() { if(mBuyer) mBuyer->LookForHouse(); } virtual void Negotiate() { if(mBuyer) mBuyer->Negotiate(); } virtual void PayMoney() { if(mBuyer) mBuyer->PayMoney(); } Buyer* GetBuyer(){return mBuyer;} private: Buyer* mBuyer; }; int main() { Buyer* HouseLooker = new BuyProxy(new RealBuyer("xiaoming")); HouseLooker->LookForHouse(); HouseLooker->Negotiate(); HouseLooker->PayMoney(); return 0; }
占时是怎么理解, 但不应该这么简单?