一雨田的专栏

伟人将复杂的事情变简单,小人将简单的事情变复杂

用户操作
[即时聊天] [发私信] [加为好友]
一雨田ID:dylgsy
91677次访问,排名1090,好友2人,关注者13人。
一雨田
dylgsy的文章
原创 41 篇
翻译 1 篇
转载 6 篇
评论 292 篇
最近评论
heray818:我的邮箱是:heray818@126.com
heray818:你好 能否也传我一份 谢谢了啊
救援隊募集:アダルトエロ不倫
モテ度審査員:童貞セフレナンパ
temp:很好
文章分类
收藏
    相册
    好友Blog
    圈内朋友
    sankt的专栏
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

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

    新一篇: 设计模式简单代码之Facade模式(编译系统篇) | 旧一篇: 设计模式简单代码之Decorator模式(小孩吃饭篇)

     /**********************************************************************************************************\
    * 作者:一雨田(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);
    }

    发表于 @ 2006年07月05日 12:46:00|评论(loading...)|编辑

    新一篇: 设计模式简单代码之Facade模式(编译系统篇) | 旧一篇: 设计模式简单代码之Decorator模式(小孩吃饭篇)

    评论

    #feng 发表于2006-07-25 01:41:00  IP: 219.136.213.*
    好!再顶一个!!
    #thunder 发表于2006-08-09 16:27:00  IP: 221.222.125.*
    不错,顶!
    #karl 发表于2006-08-26 09:31:00  IP: 219.133.51.*
    Good!支持!
    #sw 发表于2008-08-27 10:33:24  IP: 123.124.194.*
    严重支持
    #sw 发表于2008-08-27 10:33:29  IP: 123.124.194.*
    严重支持
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 一雨田