• <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è)計(jì)模式(九) 抽象工廠(Abstract Factory)

                  抽象工廠(Abstract Factory)模式看起來和前面看到的工廠方法很相似,只是它使用若干工廠方法(Factory Method)模式。每個(gè)工廠方法模式創(chuàng)建一個(gè)不同類型的對(duì)象。當(dāng)創(chuàng)建一個(gè)工廠對(duì)象時(shí),要決定將如何使用由那個(gè)工廠創(chuàng)建的所有對(duì)象。示例代碼如下(假設(shè)要?jiǎng)?chuàng)建一個(gè)通用的游戲環(huán)境,并且希望它能支持不同類型的游戲):
            #include<iostream>
            using namespace std;

            class Obstacle
            {
            public:
                virtual void action()=0;
            };

            class Player
            {
            public:
                virtual void interactWith(Obstacle*)=0;
            };

            class Kitty: public Player
            {
                virtual void interactWith(Obstacle *ob)
                {
                    cout<<"Kitty has encountered a";
                    ob->action();
                }
            };

            class KungFuGuy: public Player
            {
                virtual void interactWith(Obstacle* ob)
                {
                    cout<<"KungFuGuy now battles against a";
                    ob->action();
                }
            };
            class Puzzle: public Obstacle
            {
            public:
                void action(){cout<<"Puzzle"<<endl;}
            };

            class NastyWeapon: public Obstacle
            {
            public:
                void action(){cout<<"NastyWeapon"<<endl;}
            };

            //the abstract factory
            class GameElementFactory
            {
            public:
                virtual Player* makePlayer()=0;
                virtual Obstacle* makeObstacle()=0;
            };

            //concreate factories
            class KittiesAndPuzzles:public GameElementFactory
            {
            public:
                virtual Player* makePlayer(){return new Kitty;}
                virtual Obstacle * makeObstacle(){return new Puzzle;}
            };

            class KillAndDismember:public GameElementFactory
            {
            public:
                virtual Player* makePlayer(){return new KungFuGuy;}
                virtual Obstacle *makeObstacle(){return new NastyWeapon;}
            };


            class GameEnvironment
            {
                GameElementFactory* gef;
                Player* p;
                Obstacle *ob;
            public:
                GameEnvironment(GameElementFactory * factory)
                    :gef(factory),p(factory->makePlayer()),ob(factory->makeObstacle()){}
                void play(){p->interactWith(ob);}
                ~GameEnvironment()
                {
                    delete p;
                    delete ob;
                    delete gef;
                }
            };

            int main()
            {
                GameEnvironment
                    g1(new KittiesAndPuzzles),
                    g2(new KillAndDismember);
                g1.play();
                g2.play();
            }

            在此環(huán)境中,Player對(duì)象與Obstacle 對(duì)象交互,但是Player和Obstacle類型依賴于具體的游戲。可以選擇特定的GameElementFactory來決定游戲的類型,然后GameEnvironment控制游戲的設(shè)置和進(jìn)行。在本例中,游戲的設(shè)置和進(jìn)行很簡單,但是那些動(dòng)作在很大程度上決定了游戲的結(jié)果。

            posted on 2011-05-03 23:40 周強(qiáng) 閱讀(382) 評(píng)論(0)  編輯 收藏 引用 所屬分類: c/c++

            久久精品国内一区二区三区| 亚洲国产精品久久久天堂| 久久婷婷五月综合成人D啪| 精品久久久一二三区| 久久精品亚洲日本波多野结衣 | 久久久久无码中| 国产成人综合久久精品红| 看久久久久久a级毛片| 激情五月综合综合久久69| 久久久亚洲裙底偷窥综合| 久久91亚洲人成电影网站| 精品国产乱码久久久久软件| 狠狠干狠狠久久| 久久综合亚洲欧美成人| 亚洲AⅤ优女AV综合久久久| 国产V综合V亚洲欧美久久| 无码国内精品久久人妻麻豆按摩| 无码人妻精品一区二区三区久久久 | 久久久噜噜噜久久中文福利| 精品久久人人爽天天玩人人妻| 久久久噜噜噜久久中文福利| 亚洲午夜久久久| 国产福利电影一区二区三区久久久久成人精品综合 | 亚洲第一极品精品无码久久| 久久精品国产精品亚洲| 久久青青草原综合伊人| 日日躁夜夜躁狠狠久久AV| 亚洲人成无码www久久久| 精品欧美一区二区三区久久久| www性久久久com| 国产精品久久久久9999高清| 久久夜色精品国产欧美乱| 久久SE精品一区二区| 久久经典免费视频| 亚洲午夜福利精品久久| 亚洲精品tv久久久久久久久久| 久久国产成人亚洲精品影院| 国产ww久久久久久久久久| 99久久国产免费福利| 国产精品激情综合久久| 久久久精品国产Sm最大网站|