您的位置:首页 > 其它

设计模式之代理模式

2015-08-05 20:54 525 查看

介绍

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

适用性

远程代理Remote Proxy, 为对象在不同的地址空间提供局部代表;

虚代理Virtual Proxy, 即为对象的使用这占时提供一个虚拟的对象, 只当正在需求的时候才初始化对象;

保护代理Protection Proxy, 控制对原始对象的权限访问;

智能引用Smart Reference;



例子

小明与小梦打算买房, 为了方便他们委托一家中介帮忙寻找房源, 中介会去房地产公司一买房的名义去看房, 只有等房子真正被小明确认后才会把钱给房地产方;

代码

[code]// 抽象买家
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;
}


占时是怎么理解, 但不应该这么简单?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: