设计模式简单代码之Proxy模式(买房子篇)

 /**********************************************************************************************************/
* 作者:一雨田(http://blog.csdn.net/dylgsy/)。本文可随便转贴,但请保留此信息

* Proxy 模式:代理模式,顾名思义就是代我们处理一些事情,我们不用全部事情都亲力亲为。

* 在编程层面去理解:设置代理,就是在必要的时候再把客户的请求转发给真正的实体。现实中的例子有很多,比如代理服

* 务器,代理服务器在本地存储了很多的信息,我们访问它的时候就好象是在访问真的服务器一样,如果我们需要访问的信

* 息代理服务器上没有,那它就会自动去连接真服务器,到那去取得新的信息,然后再保存在本地,而这一切都是我们的代

* 理自动去做的,我们根本就不用知道(对客户来说,好象是在访问真的服务器。而对真服务器,可减轻了一部份的负担)。
/**********************************************************************************************************/

UML示意图如下:

/**********************************************************************************************************/
* 实例说明:

* 买房子需要办一堆的手续,我们不想那么烦,所以找房屋代理来帮我们搞手续(中介)

/**********************************************************************************************************/

 

#include  < iostream >
using   namespace  std;

//  先定义一个抽象类
class  CSubject
{
public:
    
// 定义买房的操作
    virtual void BuyRoom() = 0;
    
bool m_bDone;
}
;

//  定义买方的类,派生于CSubject
class  CBuyer:  public  CSubject
{
public:
    CBuyer()
    
{
        m_bDone 
= false;;
    }

    
virtual void BuyRoom()
    
{
        
if!m_bDone)
        
{
            
// 客户对买房子的概念是,我只管掏钱,不想管其他的琐事
            cout << "我是客户,我只需要给钱。" << endl;
            cout 
<< "手续没办,想给钱都不行" << endl;
            cout 
<< endl;
        }

        
else
        
{
            cout 
<< "我是客户,我只需要给钱。" << endl;
            cout 
<< "好吧,你的手续已经全部办好。房子买下来了。" << endl;
            cout 
<< endl;
        }

    }

}
;

//  定义代理的类,派生于CSubject
//  代理类有一个买方的引用,便于在适当的时间调用买方的函数
class  CBuyerProxy:  public  CSubject
{
public:
    CBuyerProxy(CSubject 
*s)
    
{
        _s 
= s;
        
    }

    
virtual void BuyRoom()
    
{
        cout 
<< "我是中介:贷款";
        cout 
<< " 交税";
        cout 
<< " 签合同" << endl;

        cout 
<< " 我只管办手续,钱就要靠买方给了,所以这里调用买方的函数" << endl;

        _s
->m_bDone = true;
        _s
->BuyRoom();
    }

    
private:
    CSubject 
*_s;
}
;


void  BuyRoom(CSubject  * s)
{
    s
->BuyRoom();
}


//  使用上面的类来模拟买房子
void  main()
{
    CBuyer buyer;
    CBuyerProxy buyerProxy(
&buyer);

    
// 不通过中介买房子
    BuyRoom(&buyer);

    
// 通过中介买房子
    BuyRoom(&buyerProxy);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值