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

歲月流轉,往昔空明

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>
            欧美二区在线| 久久精品视频亚洲| 欧美三区不卡| 亚洲一区二区三区涩| 日韩一区二区久久| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲视频在线观看一区| 亚洲欧美日韩高清| 国产一区二区三区的电影 | 精品成人在线视频| 久久精品日韩欧美| 裸体女人亚洲精品一区| 在线中文字幕一区| 亚洲欧美在线观看| 亚洲高清久久久| 欧美福利视频一区| 欧美肉体xxxx裸体137大胆| 午夜精品一区二区在线观看| 久久精品亚洲精品| 一区二区三区精品久久久| 亚洲免费影视第一页| 亚洲国产成人av在线| 一区二区高清视频| 一区二区亚洲欧洲国产日韩| 亚洲日本成人女熟在线观看| 国产精品海角社区在线观看| 男人的天堂亚洲在线| 欧美日韩国产一区二区三区地区 | 国产综合视频在线观看| 欧美激情亚洲自拍| 国产精品久久久久久户外露出| 久久久之久亚州精品露出| 欧美不卡一区| 久久精品视频亚洲| 久久精品视频在线看| 久久精品99| 欧美激情久久久| 久久久噜噜噜久久人人看| 欧美日精品一区视频| 欧美gay视频| 国产亚洲高清视频| 亚洲美女精品成人在线视频| 一区二区三区亚洲| 亚洲欧美日韩区| 亚洲一区二区三区影院| 欧美成人精品福利| 玖玖玖免费嫩草在线影院一区| 国产精品激情| 一本色道久久综合亚洲精品不卡| 亚洲高清视频的网址| 欧美资源在线观看| 亚洲一区二区三区影院| 欧美日韩国产一区二区三区| 欧美国产日本| 亚洲国产天堂久久综合网| 欧美一区二区三区在| 欧美一级夜夜爽| 国产精品国产一区二区| 亚洲精品综合精品自拍| 亚洲国产婷婷综合在线精品| 久久亚洲综合| 蜜臀久久久99精品久久久久久| 国产一区二区三区不卡在线观看| 亚洲伊人网站| 午夜精品福利一区二区蜜股av| 欧美噜噜久久久xxx| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲黄色精品| 麻豆精品网站| 亚洲电影有码| 日韩午夜中文字幕| 免费观看在线综合色| 欧美电影在线观看| 亚洲日本视频| 欧美日韩一区视频| 亚洲一二三级电影| 欧美一区午夜视频在线观看| 国产日韩欧美综合在线| 欧美一区观看| 欧美福利精品| 一区二区三区免费网站| 欧美特黄一级大片| 先锋影音久久久| 欧美国产视频日韩| 中日韩高清电影网| 国产女人精品视频| 久久久久国色av免费看影院| 亚洲国产精品www| 亚洲欧美经典视频| 狠狠色丁香婷综合久久| 欧美国产综合| 亚洲一区二区三区四区五区午夜| 久久久国产精品亚洲一区 | 亚洲人成在线观看一区二区| 欧美日韩一区二区三区在线看| 亚洲美女精品久久| 欧美午夜免费影院| 亚洲精品在线免费| 欧美一级视频精品观看| 亚洲国产另类精品专区| 欧美日韩午夜在线| 久久看片网站| 亚洲午夜电影在线观看| 鲁大师成人一区二区三区| 9人人澡人人爽人人精品| 国产一区二区三区久久| 欧美日韩和欧美的一区二区| 欧美伊人久久| 一级日韩一区在线观看| 老**午夜毛片一区二区三区| 亚洲欧美国产视频| 亚洲人成啪啪网站| 国产欧美精品在线播放| 欧美日韩国产成人高清视频| 久久精品一级爱片| 亚洲主播在线观看| 91久久久久久| 你懂的视频欧美| 欧美一区二区三区免费观看视频| 亚洲免费观看视频| 亚洲国产精品毛片| 狠狠久久亚洲欧美专区| 国产精品一区二区久久久| 欧美日韩成人综合天天影院| 另类天堂av| 久久乐国产精品| 久久成人羞羞网站| 亚洲性xxxx| 一本色道久久88精品综合| 亚洲人成在线影院| 亚洲激情在线观看视频免费| 裸体女人亚洲精品一区| 久久国产精品黑丝| 午夜在线视频一区二区区别| av不卡在线| 一本色道久久综合亚洲精品小说| 亚洲黄色免费网站| 亚洲第一区在线| 在线免费观看日本欧美| 激情一区二区| 在线观看的日韩av| 极品少妇一区二区三区精品视频| 国产日韩一区欧美| 韩国成人福利片在线播放| 国产一区二区三区最好精华液| 国产美女诱惑一区二区| 国产亚洲精品久久久| 国产亚洲精品福利| 狠狠色狠色综合曰曰| 在线免费不卡视频| 亚洲日本欧美在线| 国产精品99久久久久久久vr| 亚洲视频精品在线| 欧美一区二区三区免费观看| 久久国产精品第一页| 乱中年女人伦av一区二区| 欧美激情麻豆| 亚洲日本成人女熟在线观看| 一本色道久久88亚洲综合88| 午夜亚洲伦理| 久久综合久久美利坚合众国| 欧美激情aaaa| 国产精品资源| 在线日韩中文字幕| 99国产精品视频免费观看| 亚洲欧美日韩另类| 久久综合网络一区二区| 亚洲国产免费| 亚洲女人天堂av| 蜜臀av在线播放一区二区三区 | 亚洲特黄一级片| 欧美一区二区女人| 欧美激情第10页| 国产精品久在线观看| 欧美大片免费观看| 亚洲欧美日韩在线高清直播| 篠田优中文在线播放第一区| 久久精品夜色噜噜亚洲a∨| 欧美巨乳在线观看| 国产欧美日韩一区| 亚洲欧洲一区二区在线观看 | 国产日韩精品入口| 亚洲激情影院| 欧美在线一区二区| 亚洲人成在线观看| 久久九九免费视频| 欧美午夜精彩| 91久久久久久久久久久久久| 香蕉久久精品日日躁夜夜躁| 亚洲第一网站| 欧美一区视频在线| 欧美视频不卡| 亚洲精品在线三区| 久久综合激情| 午夜欧美视频| 国产精品激情| 亚洲夜间福利| 亚洲乱码国产乱码精品精| 久久青青草综合| 国产一区二区成人|