• <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++設計模式(三)代理模式(Proxy)與狀態模式(State)模式

                  代理(Proxy)模式,狀態(State)模式都提供一個代理類。代碼與代理類打交道,而實際工作的類隱藏在代理類背后。當調用代理類中的一個函數時,代理類僅轉而去調用實現類中的相應的函數。這兩種模式是如此相似,從結構上看,可以認為代理模式只是狀態模式的一個特例。但是這兩個模式的內涵是不一樣的。
                  基本思想很簡單:代理類派生來自一個基類,由平行地派生來自同一個基類的一個或多個類提供實際的實現。當一個代理對象被創建的時候,一個實現對象就分配給了它,代理對象就將函數調用發給實現對象。
                  從結構上來看,代理模式和狀態模式的區別很簡單:代理模式只有一個實現類,而狀態模式有多個(一個以上)實現。認為這兩種設計模式的應用也不同:代理模式控制對其實現類的訪問,而狀態模式動態地改變其實現類。
            (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)狀態模式
            #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 周強 閱讀(718) 評論(0)  編輯 收藏 引用 所屬分類: c/c++

            品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 青青国产成人久久91网| 一本一本久久aa综合精品 | 久久青青国产| 精品无码久久久久久久动漫| 久久99中文字幕久久| 久久精品人人做人人爽电影| 1000部精品久久久久久久久| 2021久久国自产拍精品| 人人狠狠综合久久亚洲婷婷 | 久久91亚洲人成电影网站| 日日躁夜夜躁狠狠久久AV| 亚洲国产另类久久久精品黑人| 久久笫一福利免费导航 | 精品综合久久久久久97| AV无码久久久久不卡蜜桃| 午夜精品久久久久久中宇| 91久久精品91久久性色| 色综合合久久天天综合绕视看| 国产真实乱对白精彩久久| 伊人久久大香线蕉综合5g| 性色欲网站人妻丰满中文久久不卡| 色88久久久久高潮综合影院 | 久久婷婷午色综合夜啪| 亚洲中文久久精品无码ww16| 久久精品aⅴ无码中文字字幕不卡| 一本大道加勒比久久综合| 香蕉99久久国产综合精品宅男自 | 国内精品久久久久久久久电影网 | 欧美丰满熟妇BBB久久久| 成人久久久观看免费毛片| 国产精品免费久久久久电影网| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 久久精品无码午夜福利理论片| 九九久久99综合一区二区| 欧美一级久久久久久久大| 色综合久久久久无码专区| 国产精品热久久无码av| 无码超乳爆乳中文字幕久久| 精品人妻伦九区久久AAA片69| 亚洲狠狠婷婷综合久久久久|