• <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>

            Loki庫研究-Factory,AbstractFactory

            上個(gè)星期, ric和我提出了這樣一個(gè)問題,就是一個(gè)人物技能體系,如何設(shè)定,比較原始的方法是,設(shè)立一個(gè)純虛基類,然后一層一層的派生,但是這樣有一個(gè)問題..就是如何出現(xiàn)兩個(gè)不同的派生體系對(duì)同一功能需求.這樣...就只能在兩個(gè)派生體系中都設(shè)定一份..造成代碼的無復(fù)用和龐大.雖然這點(diǎn)可以在前期避免,但是沒有人是神......前期構(gòu)架無法得到最后的結(jié)構(gòu),構(gòu)架總是在調(diào)整,我第一次提出的方法是..將每有功能以組件形式提供,在相應(yīng)的功能需求者里組裝,這個(gè)思路是可以..但是實(shí)現(xiàn)起來有點(diǎn)郁悶,因?yàn)槲也恢朗怯脝渭兊念恘ew...還是使用單件來做更好,相反,,我到是覺得這兩種都不好.
            帶著這樣的需求和思路,去研究了一下Loki的Factory,AbstractFactory  類廠與抽象類廠.
            Factoy可以理解為一個(gè)可以保存類的表,通過Register方法,將類以數(shù)字或字符的形式,保存起來,當(dāng)然需要提供一個(gè)可以在內(nèi)部new的函數(shù).在使用用通過
            在注冊(cè)時(shí)的類標(biāo)示,加上CreateObject方法來返回相應(yīng)的類指針,其實(shí)就相當(dāng)于一個(gè)類表.我們可以通過我們自定義的標(biāo)示來創(chuàng)建相對(duì)應(yīng)的類.
            AbstractFactory 可以理解為抽象的類表,就是在前期不需要提供相應(yīng)的可以在內(nèi)部new的函數(shù),只需要提供類就可以注冊(cè)為一個(gè)類廠,在使用時(shí).通過類來進(jìn)行創(chuàng)建,最大的區(qū)別是...AbstractFactory 本身就提供組裝的概念.可以在設(shè)定基本工廠之后,根據(jù)基本工廠,設(shè)定具體工廠模型.在使用時(shí),可以通過具體工廠模型得到在具體工廠模型中注冊(cè)的類,最大的區(qū)別時(shí),,可以通過注冊(cè)類的基類.也就是基本工廠中注冊(cè)類來得到.這樣很爽..但是.還沒有想清楚在真正的人物技能體系中,如何去使用這個(gè)東東.偶滴神啊......讓偶想清楚吧...下面給些具體的例子

            factory:
            Factory< AbstractProduct, int > aFactory;
              aFactory.Register( 1, createProductNull );<br>
              aFactory.CreateObject( 1 );

            AbstractFactory:
            typedef ::Loki::AbstractFactory< LOKI_TYPELIST_3(Soldier, Monster, SuperMonster)>  \
            AbstractEnemyFactory;


            typedef ::Loki::ConcreteFactory<AbstractEnemyFactory, ::Loki::OpNewFactoryUnit,     \
            LOKI_TYPELIST_3(SillySoldier, SillyMonster, SillySuperMonster)>
            EasyLevelEnemyFactory;

            typedef ::Loki::ConcreteFactory<AbstractEnemyFactory, ::Loki::OpNewFactoryUnit,     \
            LOKI_TYPELIST_3(BadSoldier, BadMonster, BadSuperMonster)>
            DieHardLevelEnemyFactory;

            switch (id)
              {
              case 0:
               {
                pFactory = new EasyLevelEnemyFactory;
               }
               break;
              case 1:
               {
                pFactory  = new DieHardLevelEnemyFactory;
               }
               break;
              }

            the.Select(0);
            SmartPtr<Soldier>::Ptr pMonster = the.pFactory->Create<Soldier>();

            posted on 2007-11-05 08:06 Randy 閱讀(773) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            <2007年11月>
            28293031123
            45678910
            11121314151617
            18192021222324
            2526272829301
            2345678

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(3)

            隨筆檔案

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久精品人人槡人妻人人玩AV | 99久久人人爽亚洲精品美女| 精品久久无码中文字幕| 久久精品九九亚洲精品| 亚洲国产成人久久综合一| 99久久精品这里只有精品| 久久香蕉一级毛片| 国产高潮国产高潮久久久91 | 嫩草伊人久久精品少妇AV| 久久久久久久久久久精品尤物| 欧美久久天天综合香蕉伊| 免费无码国产欧美久久18| 亚洲AV无码久久| 亚洲国产精品热久久| 久久久久久国产精品美女| 久久人人爽人人爽人人片AV不 | 国产福利电影一区二区三区久久老子无码午夜伦不 | 精品国产一区二区三区久久蜜臀| 久久久久久国产精品美女| 国内精品久久久久影院亚洲| 亚洲午夜久久久久久久久久| 精品久久一区二区| 色综合久久久久综合99| 久久精品国产亚洲av麻豆色欲| 国产精品一久久香蕉国产线看观看| 国产福利电影一区二区三区,免费久久久久久久精 | 精品久久久久久中文字幕人妻最新| 久久成人影院精品777| 性做久久久久久久久浪潮| 久久久久久无码Av成人影院| 国产精品成人无码久久久久久 | 久久婷婷五月综合色99啪ak| 99久久免费国产精品特黄| 久久99精品国产一区二区三区 | 国产成人久久精品二区三区| 亚洲色欲久久久久综合网| 亚洲欧美成人综合久久久| 青青热久久国产久精品 | 久久99热这里只有精品国产| 三级片免费观看久久| 久久性精品|