青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

歲月流轉,往昔空明

C++博客 首頁 新隨筆 聯系 聚合 管理
  118 Posts :: 3 Stories :: 413 Comments :: 0 Trackbacks
創建型模式的使用
GOF94的創建型模式,總共有五種。其中一種的范圍是類的,四種是對象的。
1.Factory Method(virtual constructor)。
工廠方法在創建型模式里面的使用的頻率是很高的,也是非常容易使用的。
由于工廠方法本身的一些特點,它們往往被說明成為靜態的,如果這個靜態函數就是待創建的類型的靜態成員函數,那么,這就是Meyer所謂的 virtual constructor。(More Effective C++)這個東東很是厲害,我們可以利用它,依據數據創建正確的對象。
在游戲的過程中,存檔和取檔是在所難免的。在存儲的過程中,你需要將一個自定義類串行化到文件中。這個到不是什么難事。但是如果你要從文件中讀取對象呢? 首先你就需要知道這個對象的類,然后才能創建啊。這個時候,virtual constructor便可以顯示出它的作用來。什么?你知道了?好,你寫一 段代碼給我看看。

TypeID id;//類標識,每個類唯一,可以籍此判斷類型
switch (id)
{
case NPC_ID : 
//創建NPC,讀入數據。。。
case MONSTOR: 

}

不不不,我絕對不是叫你要這么寫!這段代碼的代價太大了。有效率的做法是,我們使用一個映射表。方法不是靜態的嗎?那好,我就給它統一一個函數聲明:
typedef (void*)(*PFnCreateObject)(ByteStream& stream/*資源流*/);
注意,這后面的這個void*理論上是需要返回一個指針,而這個指針又因為類型轉換而失去了識別類型的作用。但是不要忘了,我們調用的是一個函數,一切需要彌補的缺陷,都可以在函數中完成。
因此,我們可以這樣寫一個查找表:
PFnCreateObject creatorFuncTable[MAX_TYPE_ID];
在程序需要讀取存檔的時候,我們可以:
void Load(ByteStream& stream)
{
  
//
  TypeID id;
  stream.Read(
&id);
  (
*creatorFuncTable[id])(stream);
  
//
}
這種做法的麻煩之處在于要為每一個類開一個ID。如果是手工完成這一項的話,是很需要點功夫的。而且維護起來也不是很方便。因此,這里可以用GUID再HASH的辦法獲取一個Hash表。保存對象時要保存相應的GUID,查找時使用Hash查找。
順便說一下,如果有個非虛函數 Foo,有個類
class A
{
  
void foo() {
    
if(this == NULL) {
      
//操作,但是不能調用A類的非靜態成員或虛函數
      cout << "Aha! 還是能運行哦!" << endl;
    } 
else {
      cout 
<< "沒什么了不起的,地球人都知道!" << endl;
    }
  }
};
//
A* p = NULL;
p
->foo(); 

 這個調用是正確的!因為除了使用ECX傳入NULL(this)以外,并沒有非法的內存操作。因此,運行時也不會有錯誤。 當然,以上的調用實際上是不可取的。而且當foo為虛函數的時候,這種調用就不能正確進行了,因為虛函數是先要訪問虛函數表的,而虛函數表又是對象而不是類的一部分,調用了就訪問了錯誤的地址,所以其行為是不確定的。
所以說,Factory Method 的特點就是:依據不同條件,創造不同型別。(這里的條件就是煩人的類型ID)在創建之前,我們不能確定物體的型別。
如果我們將靜態函數變為一個類(不是被創建的類)的成員函數,那么,這個結構就和Gof94上的描述一樣了。Gof94上的 Factory Method,有著它自己的特點,這一點請參見書本。這里與Gof94的帶繼承的工廠方法相比,只是說對于不同的創建條件,構造函數的分 派方式不同而已。(這點我將在下面講述到)
通過對工廠方法的使用,我們可以實現很多的功能,例如利用池分配等等。其中的一些功能,我們也可以通過重載operator new和 operator delete的辦法實現,但是一些其它的功能,這種方法實現起來就會很吃力或者不可行,那么,工廠方法就為我們在創建的時候便搭建了一 個足夠我們恣意施展才華的場所。
posted on 2007-06-07 17:45 空明流轉 閱讀(984) 評論(3)  編輯 收藏 引用

評論

# re: 亂彈游戲中的設計模式 - Factory Method 2007-06-07 21:46 李錦俊
I Like 設計模式~~
多寫寫類似的文章哦。
我還有好多個設計模式還沒有理解啊。  回復  更多評論
  

# re: 亂彈游戲中的設計模式 - Factory Method 2007-06-07 22:19 pass86
估計PFnCreateObject creatorFuncTable[MAX_TYPE_ID];因該是
PFnCreateObject* creatorFuncTable[MAX_TYPE_ID];  回復  更多評論
  

# re: 亂彈游戲中的設計模式 - Factory Method 2007-06-07 23:25 空明流轉
沒有錯,呵呵.  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美日韩亚洲视频一区| 欧美国产一区二区在线观看 | 中文日韩在线视频| 亚洲国产欧美一区二区三区同亚洲 | 狠狠综合久久| 在线欧美日韩国产| 亚洲三级免费| 99在线精品观看| 亚洲一区二区三区精品视频| 亚洲欧美国产视频| 久久精品在线播放| 欧美国产高清| 亚洲天堂视频在线观看| 欧美与黑人午夜性猛交久久久| 久久国产精品久久w女人spa| 免费不卡亚洲欧美| 国产精品xxxav免费视频| 国产午夜亚洲精品羞羞网站| 亚洲视频电影图片偷拍一区| 国内精品久久久久影院薰衣草| 亚洲高清免费| 午夜精品久久久久| 免费一级欧美在线大片| 一区二区电影免费在线观看| 欧美在线视频一区二区| 欧美巨乳在线| 国产亚洲精品久久久久婷婷瑜伽| 亚洲国产精品久久| 性欧美激情精品| 91久久在线视频| 久久www免费人成看片高清| 欧美女激情福利| 韩国美女久久| 午夜国产精品影院在线观看| 欧美国产免费| 亚洲欧美激情视频| 欧美日韩国产不卡| 亚洲国产欧美一区| 久久久精品国产免大香伊 | 性欧美videos另类喷潮| 欧美韩日一区二区| 在线观看欧美日本| 欧美在线观看一区二区| 亚洲人成亚洲人成在线观看| 欧美一二三区在线观看| 欧美午夜电影一区| 99在线|亚洲一区二区| 欧美岛国在线观看| 久久婷婷综合激情| 在线成人h网| 久久激情视频免费观看| 亚洲一区欧美一区| 国产精品久久久久av| 一区二区三区欧美在线观看| 欧美激情精品久久久久久| 久久久久久电影| 国产一区二区三区黄视频| 欧美在线综合视频| 亚洲在线成人| 国产伦精品一区二区三| 午夜精品久久| 亚洲欧美成人精品| 国产精品视频xxx| 亚洲欧美精品一区| 亚洲伊人网站| 国产综合色在线| 久久婷婷久久| 久久亚洲精品一区| 亚洲国产综合91精品麻豆| 欧美成人免费全部观看天天性色| 久久精品中文| 亚洲日韩欧美视频| 99国产精品99久久久久久| 欧美日韩一区二区视频在线| 亚洲视频成人| 亚洲自拍电影| 亚洲女性喷水在线观看一区| 亚洲欧美激情四射在线日| 国产欧美精品日韩区二区麻豆天美| 亚洲素人在线| 亚洲欧美一区二区三区在线| 国产在线精品二区| 欧美 日韩 国产精品免费观看| 欧美大片91| 午夜精品久久久久影视 | 欧美黄色影院| 欧美精品国产一区| 亚洲欧美日韩精品在线| 欧美在线视频观看| 亚洲精品国产精品国自产在线| 亚洲精品久久久久久下一站| 国产精品久久久久久久久搜平片| 久久国产主播| 欧美va亚洲va国产综合| 亚洲综合色在线| 久色婷婷小香蕉久久| 亚洲一区二区三区免费视频| 欧美一区二区三区四区视频| 亚洲精品视频免费在线观看| 亚洲尤物在线视频观看| 亚洲激情视频| 欧美一区观看| 中文在线资源观看网站视频免费不卡| 午夜亚洲激情| 亚洲视频成人| 女主播福利一区| 久久精品日韩一区二区三区| 欧美精品免费看| 久久亚洲春色中文字幕久久久| 欧美看片网站| 蜜桃精品一区二区三区| 欧美日一区二区三区在线观看国产免| 久久综合中文| 国产精品午夜国产小视频| 亚洲人成久久| 亚洲黄色影片| 久久蜜桃香蕉精品一区二区三区| 亚洲深夜福利网站| 免费一级欧美片在线播放| 欧美主播一区二区三区| 欧美日韩美女| 亚洲国产中文字幕在线观看| 激情丁香综合| 欧美在线不卡| 久久福利一区| 国产精品综合| 亚洲婷婷综合久久一本伊一区| 亚洲精选在线| 欧美成人免费在线观看| 久久中文字幕导航| 国际精品欧美精品| 午夜精品福利一区二区三区av| 亚洲一区二区三区四区中文| 欧美极品影院| 亚洲国产精品va在线看黑人 | 久久精品人人做人人爽| 亚洲欧美激情一区二区| 一本到12不卡视频在线dvd| 欧美日韩一区免费| 亚洲成色999久久网站| 在线免费观看日本一区| 久久久成人网| 狂野欧美激情性xxxx欧美| 精品91免费| 免费久久99精品国产| 欧美黄色片免费观看| 91久久精品日日躁夜夜躁欧美 | 久久综合九色欧美综合狠狠| 黑人操亚洲美女惩罚| 欧美专区一区二区三区| 久久综合九色| 亚洲七七久久综合桃花剧情介绍| 欧美aaaaaaaa牛牛影院| 亚洲国产高清aⅴ视频| 亚洲精品网站在线播放gif| 欧美人成网站| 亚洲午夜精品17c| 久久综合精品一区| 91久久黄色| 国产精品极品美女粉嫩高清在线| 亚洲一区在线视频| 久久性天堂网| 一区二区三区你懂的| 国产日产高清欧美一区二区三区| 欧美专区在线| 亚洲狠狠婷婷| 久久国产精彩视频| 亚洲国产日日夜夜| 国产精品九九久久久久久久| 欧美一级视频免费在线观看| 欧美a级一区二区| 亚洲一二三区精品| 加勒比av一区二区| 欧美日韩在线播放一区二区| 亚洲欧美综合精品久久成人 | 久久精品国产77777蜜臀| 欧美大片免费久久精品三p| 中文精品在线| 在线成人免费观看| 国产精品久久午夜| 免费一级欧美在线大片| 亚洲欧美国产精品va在线观看| 欧美福利小视频| 久久九九精品| 亚洲视频一区二区在线观看| 韩日欧美一区二区| 欧美午夜影院| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲欧美日韩第一区| 亚洲精品在线电影| 六月婷婷一区| 午夜在线a亚洲v天堂网2018| 91久久中文| 在线免费不卡视频| 国产精品久久久久久亚洲毛片| 免费在线成人| 久久久亚洲综合| 欧美在线免费播放| 午夜精品久久久久久99热软件| 99视频在线观看一区三区|