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

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

            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 閱讀(779) 評論(0)  編輯 收藏 引用

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

            導航

            統計

            常用鏈接

            留言簿(3)

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久se这里只有精品| 精品无码久久久久国产| 四虎亚洲国产成人久久精品| 亚洲精品NV久久久久久久久久| 亚洲av日韩精品久久久久久a| 国产一级做a爰片久久毛片| 三级韩国一区久久二区综合| 少妇高潮惨叫久久久久久| 国产一区二区精品久久凹凸| 久久久无码精品亚洲日韩京东传媒| 99久久er这里只有精品18| 亚洲精品第一综合99久久| 久久―日本道色综合久久| 久久久久久精品无码人妻| 国产成人精品久久亚洲| 中文字幕久久波多野结衣av| 久久精品国产第一区二区| 精品免费久久久久久久| 99久久无色码中文字幕人妻| 久久久久香蕉视频| 伊人久久综合热线大杳蕉下载| 久久婷婷五月综合色奶水99啪| 一本久久综合亚洲鲁鲁五月天| 国产高清美女一级a毛片久久w| 精品国产一区二区三区久久| 亚洲AV无码久久精品狠狠爱浪潮| 久久嫩草影院免费看夜色| 国产激情久久久久影院小草| 精品国产一区二区三区久久| 99久久精品国产麻豆| 国产精品美女久久久久网| 久久久久人妻精品一区二区三区 | 69久久精品无码一区二区| 亚洲精品无码久久久| 久久有码中文字幕| 欧美日韩精品久久久免费观看| 久久天天躁狠狠躁夜夜av浪潮| 久久婷婷色综合一区二区| 久久久久无码专区亚洲av| 中文字幕精品无码久久久久久3D日动漫| 久久久久亚洲爆乳少妇无|