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

歲月流轉,往昔空明

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>
            日韩午夜剧场| 亚洲精品免费在线| 欧美一级久久久久久久大片| 国产深夜精品| 欧美91视频| 欧美成人免费网站| 亚洲小视频在线观看| 午夜欧美不卡精品aaaaa| 国内精品**久久毛片app| 欧美大片第1页| 国产精品盗摄一区二区三区| 久久激情五月丁香伊人| 蜜臀久久久99精品久久久久久 | 国产精品爽黄69| 久久综合国产精品| 欧美精品亚洲一区二区在线播放| 午夜精品国产更新| 久久精品综合一区| 一区二区三区日韩精品| 久久动漫亚洲| 一区二区三区欧美激情| 欧美一区二区三区视频| 亚洲精品在线视频观看| 欧美一区二区高清| 夜夜爽99久久国产综合精品女不卡| 亚洲欧美日本国产专区一区| 91久久在线视频| 午夜精品久久久久久久久久久久| 亚洲三级电影全部在线观看高清| 亚洲国内精品| 久久久久久电影| 欧美激情偷拍| 久久亚洲综合色一区二区三区| 欧美全黄视频| 欧美不卡在线视频| 国产日产欧产精品推荐色| 亚洲狼人精品一区二区三区| 在线观看亚洲专区| 性视频1819p久久| 亚洲一区在线视频| 欧美大片一区二区三区| 噜噜爱69成人精品| 国产人妖伪娘一区91| 在线视频精品一区| 中国成人黄色视屏| 欧美国产精品| 欧美高清成人| 亚洲二区视频| 久久精品视频一| 久久精品国产99精品国产亚洲性色 | 国产精品高潮呻吟视频| 亚洲精品久久久久久下一站| 亚洲国产欧美日韩精品| 久久久欧美精品| 久久躁日日躁aaaaxxxx| 国产一区二区三区在线免费观看 | 老司机精品视频一区二区三区| 欧美在线91| 国产欧美日韩不卡| 午夜精品成人在线| 欧美综合二区| 激情av一区二区| 久久久久久91香蕉国产| 免费成人高清在线视频| 亚洲国产精品精华液2区45| 久久香蕉国产线看观看av| 欧美大片免费看| 亚洲国产三级网| 欧美福利在线| 99riav国产精品| 亚洲欧美激情四射在线日| 国产精品夜夜嗨| 欧美一区二区在线| 久久综合色综合88| 亚洲人成7777| 欧美三日本三级少妇三99| 亚洲一区免费| 美脚丝袜一区二区三区在线观看| 亚洲大胆人体视频| 欧美人在线视频| 亚洲午夜成aⅴ人片| 久久久www| 亚洲啪啪91| 国产精品入口日韩视频大尺度| 欧美一区二区三区四区在线| 免费国产一区二区| 在线亚洲一区观看| 国产日产高清欧美一区二区三区| 久久先锋影音| 99亚洲伊人久久精品影院红桃| 欧美黄色一级视频| 亚洲国产精品一区二区久| 日韩一区二区精品葵司在线| 国产精品久久久久aaaa| 欧美在线视屏 | 午夜精品视频| 亚洲高清在线播放| 国产精品国产三级国产普通话三级| 午夜精品久久久久久久白皮肤 | 99热在这里有精品免费| 久久久www成人免费毛片麻豆| 亚洲人成网站色ww在线| 国产精自产拍久久久久久| 毛片基地黄久久久久久天堂 | 久久亚洲综合色一区二区三区| 99爱精品视频| 狠狠色综合网站久久久久久久| 欧美日韩高清在线| 久久免费视频在线观看| 亚洲一品av免费观看| 亚洲高清视频一区| 久久久xxx| 午夜免费久久久久| 这里只有精品丝袜| 亚洲级视频在线观看免费1级| 国产亚洲a∨片在线观看| 欧美日韩一区二区三区在线看| 久久五月婷婷丁香社区| 欧美在线看片a免费观看| 亚洲一本视频| 99精品免费视频| 亚洲黄一区二区| 亚洲电影在线免费观看| 久久婷婷蜜乳一本欲蜜臀| 午夜精品一区二区三区在线播放 | 亚洲春色另类小说| 六月婷婷一区| 久久亚洲国产精品日日av夜夜| 香蕉久久夜色精品国产| 亚洲无吗在线| 亚洲欧美www| 亚洲一区二区三区免费观看| 一区二区三区国产在线观看| 亚洲乱码国产乱码精品精可以看 | 亚洲影院免费观看| 亚洲四色影视在线观看| 一本一本久久| 亚洲色在线视频| 亚洲一区免费视频| 亚洲一区中文字幕在线观看| 亚洲一区二区毛片| 亚洲在线观看视频| 午夜一级在线看亚洲| 久久av一区二区三区漫画| 欧美一区免费| 久久婷婷综合激情| 欧美成人a∨高清免费观看| 欧美激情视频在线播放| 91久久黄色| 亚洲视频每日更新| 校园春色国产精品| 久久手机精品视频| 欧美激情一区二区三区高清视频| 欧美日韩福利在线观看| 国产精品普通话对白| 国产午夜久久久久| 亚洲国产日韩一区| 国产精品99久久久久久有的能看| 亚洲欧美日韩在线观看a三区| 欧美va亚洲va香蕉在线| 裸体丰满少妇做受久久99精品| 性做久久久久久久久| 久久综合久久综合久久| 欧美激情精品久久久久久| 欧美三级特黄| 国产欧美日韩另类一区| 亚洲国产精品一区二区久 | 欧美成人dvd在线视频| 欧美日韩精品久久久| 国产女人水真多18毛片18精品视频| 国产原创一区二区| 99视频超级精品| 久久久久久色| 最新中文字幕亚洲| 午夜一区不卡| 欧美激情亚洲综合一区| 国产精品视频男人的天堂| 最新日韩欧美| 久久精品国产欧美亚洲人人爽| 亚洲第一区在线观看| 亚洲综合精品四区| 欧美成人免费网站| 国产综合久久久久久| 亚洲深夜av| 欧美激情导航| 欧美一级欧美一级在线播放| 欧美精品在线视频观看| 在线 亚洲欧美在线综合一区| 亚洲影院在线| 亚洲精品美女在线观看播放| 欧美专区在线播放| 国产精品美女一区二区在线观看| 亚洲黄色性网站| 久久蜜桃香蕉精品一区二区三区| 99综合在线| 欧美黄色aaaa| 亚洲精品国精品久久99热| 久久综合久久久| 午夜精品久久久久久久男人的天堂| 欧美激情a∨在线视频播放|