• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Just enjoy programming

            c++設(shè)計模式(三)代理模式(Proxy)與狀態(tài)模式(State)模式

                  代理(Proxy)模式,狀態(tài)(State)模式都提供一個代理類。代碼與代理類打交道,而實際工作的類隱藏在代理類背后。當調(diào)用代理類中的一個函數(shù)時,代理類僅轉(zhuǎn)而去調(diào)用實現(xiàn)類中的相應的函數(shù)。這兩種模式是如此相似,從結(jié)構(gòu)上看,可以認為代理模式只是狀態(tài)模式的一個特例。但是這兩個模式的內(nèi)涵是不一樣的。
                  基本思想很簡單:代理類派生來自一個基類,由平行地派生來自同一個基類的一個或多個類提供實際的實現(xiàn)。當一個代理對象被創(chuàng)建的時候,一個實現(xiàn)對象就分配給了它,代理對象就將函數(shù)調(diào)用發(fā)給實現(xiàn)對象。
                  從結(jié)構(gòu)上來看,代理模式和狀態(tài)模式的區(qū)別很簡單:代理模式只有一個實現(xiàn)類,而狀態(tài)模式有多個(一個以上)實現(xiàn)。認為這兩種設(shè)計模式的應用也不同:代理模式控制對其實現(xiàn)類的訪問,而狀態(tài)模式動態(tài)地改變其實現(xiàn)類。
            (1)代理模式例子:
            #include<iostream>

            using namespace std;

            class ProxyBase
            {
                public:
                    virtual void f()=0;
                    virtual void g()=0;
                    virtual void h()=0;
                    virtual ~ProxyBase(){}
            };


            class Implementation :public ProxyBase
            {
                public:
                    void f(){cout<<"Implementation.f()"<<endl;}
                    void g(){cout<<"Implementation.g()"<<endl;}
                    void h(){cout<<"Implementation.h()"<<endl;}
            };


            class Proxy: public ProxyBase
            {
                ProxyBase *implementation;
                public:
                    Proxy(){implementation=new Implementation();}
                    ~Proxy(){delete implementation;}


                    void f(){implementation->f();}
                    void g(){implementation->g();}
                    void h(){implementation->h();}
            };

            int main()
            {
                Proxy p;
                p.f();
                p.g();
                p.h();
            }

            (2)狀態(tài)模式
            #include<iostream>

            using namespace std;

            class Creature
            {
                class State
                {
                    public:
                        virtual string response()=0;
                };

                class Frog : public State
                {
                    public:
                        string response(){return "Ribbet!";}
                };

                class Prince:public State
                {
                    public:
                        string response(){return "Darling!";}
                };

                State *state;
                public:
                    Creature(): state(new Frog()){}
                    void greet()
                    {
                        cout<<state->response()<<endl;
                    }
                    void kiss()
                    {
                        delete state;
                        state=new Prince();
                    }
            };


            int main()
            {
                Creature creature;
                creature.greet();
                creature.kiss();
                creature.greet();
            }

            posted on 2011-04-28 16:04 周強 閱讀(727) 評論(0)  編輯 收藏 引用 所屬分類: c/c++

            久久久久久国产精品美女| 久久九九全国免费| 久久这里只有精品首页| 伊人久久一区二区三区无码| 久久久精品国产免大香伊| 国产精品久久久久jk制服| 国产精品免费久久久久久久久| 人妻少妇精品久久| 99久久精品午夜一区二区| 亚洲?V乱码久久精品蜜桃| 久久精品人人做人人妻人人玩| 精品久久人人妻人人做精品| 人妻无码αv中文字幕久久琪琪布 人妻无码精品久久亚瑟影视 | 99久久久精品| 欧美色综合久久久久久| 狠狠色婷婷综合天天久久丁香| 日韩电影久久久被窝网| 久久天堂AV综合合色蜜桃网| 国产精品青草久久久久福利99| 久久狠狠爱亚洲综合影院| 国产精品伊人久久伊人电影 | 久久青草国产手机看片福利盒子| 亚洲国产精品嫩草影院久久| 久久久久四虎国产精品| 97精品依人久久久大香线蕉97| 久久久久国产一区二区| 丁香五月综合久久激情| 国产精品一区二区久久精品| 综合人妻久久一区二区精品| 亚洲午夜精品久久久久久app| 99久久亚洲综合精品成人| 久久夜色精品国产噜噜亚洲AV| 久久午夜夜伦鲁鲁片免费无码影视| 精品无码久久久久久国产| 久久综合九色综合欧美狠狠| 久久99精品久久久久久动态图 | 亚洲成av人片不卡无码久久| 久久WWW免费人成—看片| 99久久国产综合精品五月天喷水| 久久精品国产亚洲麻豆| 久久99国产亚洲高清观看首页|