设计模式之代理模式

介绍

为其它对象提供一种代理以控制对这个对象的访问, 如只有当真的要访问这个对象的时候才进行创建并初始化, 在者之前可以利用该对象的代理, 这样就省去了创建和初始化的消耗;

适用性
  • 远程代理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;
}

占时是怎么理解, 但不应该这么简单?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值