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

歲月流轉,往昔空明

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>
            一本色道久久综合亚洲精品高清| 午夜久久资源| 国产精品vvv| 欧美人成在线视频| 国产精品v欧美精品v日韩| 国产精品久久激情| 国产精品区二区三区日本| 国产一区二区精品丝袜| 亚洲国产精品电影| 国产精品99久久99久久久二8| 亚洲午夜国产一区99re久久 | 亚洲国产日韩一区| 日韩午夜一区| 欧美一区二区在线播放| 久久久夜色精品亚洲| 欧美黑人多人双交| 亚洲午夜羞羞片| 久久视频一区二区| 欧美日韩一级大片网址| 狠狠入ady亚洲精品经典电影| 亚洲国产成人精品久久久国产成人一区| 亚洲黑丝在线| 免费在线亚洲欧美| 欧美日韩1080p| 国产亚洲一区二区三区| 日韩视频一区二区三区在线播放免费观看 | 欧美二区在线| 在线亚洲免费视频| 久久伊人亚洲| 国产精自产拍久久久久久| 亚洲破处大片| 久久精品亚洲精品| 日韩视频久久| 久久一区亚洲| 国产日韩精品一区| 亚洲网友自拍| 亚洲电影免费观看高清完整版在线 | 亚洲电影欧美电影有声小说| 亚洲男女自偷自拍| 欧美日韩精品二区第二页| 激情成人综合网| 亚洲欧美中文日韩在线| 最近中文字幕mv在线一区二区三区四区 | 欧美一二区视频| 欧美日韩国产小视频在线观看| 好看的日韩av电影| 欧美一区二区三区免费在线看| 亚洲精品中文字幕有码专区| 欧美顶级少妇做爰| 影音先锋久久| 久久久在线视频| 欧美一区二区三区免费大片| 国产精品永久免费在线| 亚洲免费视频成人| 一区二区三区高清在线| 欧美体内谢she精2性欧美| 99天天综合性| 亚洲精品视频免费观看| 欧美全黄视频| 亚洲中无吗在线| 一区二区成人精品| 国产精品区免费视频| 欧美一区二区三区喷汁尤物| 午夜精品久久久久久99热| 国产目拍亚洲精品99久久精品| 欧美一区1区三区3区公司| 亚洲美女诱惑| 99视频一区二区三区| 亚洲国产精品久久91精品| 久久亚洲私人国产精品va| 亚洲成色最大综合在线| 女同一区二区| 欧美电影专区| 中文亚洲欧美| 亚洲欧美精品| 国内成人精品2018免费看 | 国户精品久久久久久久久久久不卡 | 午夜精品久久久久影视| 亚洲欧美日韩在线综合| 国产一区二区毛片| 欧美激情四色| 欧美视频第二页| 久久国产一区二区三区| 老司机午夜免费精品视频| 一区二区高清| 欧美一区二区三区视频在线观看| 激情久久久久久| 亚洲人人精品| 国产亚洲精品aa| 亚洲激情视频| 国产亚洲激情| 99综合在线| 在线观看福利一区| 一本色道久久综合亚洲二区三区 | 亚洲天堂激情| 欧美在线日韩| 一区二区免费在线观看| 欧美自拍偷拍午夜视频| 一本大道久久a久久精二百| 欧美亚洲免费在线| 亚洲精品欧美在线| 欧美一区二区视频网站| 一区二区三区国产在线| 久久在线免费视频| 欧美中文字幕第一页| 欧美激情在线有限公司| 狼人社综合社区| 国产精品久久久久久久久果冻传媒| 每日更新成人在线视频| 国产精品无码永久免费888| 亚洲激情网址| 在线免费观看日本一区| 欧美一级精品大片| 午夜精品在线观看| 欧美日韩专区| 亚洲黄色免费网站| 1024日韩| 久久精品30| 久久国产精品亚洲77777| 欧美视频在线一区| 亚洲激情国产| 亚洲人成精品久久久久| 麻豆精品精品国产自在97香蕉| 欧美激情精品久久久| 日韩午夜电影av| 欧美影院一区| 香蕉久久夜色精品国产使用方法| 欧美福利一区二区三区| 美女视频黄a大片欧美| 国产亚洲精品久| 午夜精品福利在线观看| 午夜精品久久久久影视| 国产精品福利av| 一区二区三区精品国产| 亚洲视屏在线播放| 欧美日本中文| 亚洲免费电影在线| 亚洲少妇自拍| 欧美午夜电影在线| 亚洲午夜久久久久久久久电影院| 亚洲制服av| 国产农村妇女精品一区二区| 亚洲一区二区三区免费在线观看| 亚洲综合久久久久| 国产精品视频精品视频| 亚洲欧美春色| 久久久久久久网站| 在线观看日韩一区| 欧美高清视频在线播放| 亚洲精品在线观看免费| 亚洲欧美日韩久久精品| 国产日韩欧美综合在线| 欧美在线网址| 欧美好吊妞视频| 制服丝袜激情欧洲亚洲| 欧美视频中文字幕在线| 亚洲欧美国产精品专区久久| 久久久久99精品国产片| 亚洲国产欧美一区二区三区丁香婷| 欧美~级网站不卡| 夜夜嗨av一区二区三区网页| 久久精品99无色码中文字幕| 亚洲成色777777女色窝| 欧美人体xx| 午夜亚洲视频| 亚洲高清不卡在线| 午夜精品在线| 亚洲欧洲在线播放| 国产精品一区二区欧美| 久久婷婷av| 亚洲一区二区四区| 欧美高清在线精品一区| 亚洲欧美日韩综合| 亚洲激情在线视频| 国产毛片精品视频| 欧美国产视频日韩| 久久爱91午夜羞羞| 一本色道久久综合亚洲二区三区| 久久一综合视频| 亚洲女ⅴideoshd黑人| 亚洲福利视频一区二区| 国产精品综合不卡av| 欧美成人四级电影| 午夜在线播放视频欧美| 亚洲精品久久久久久久久久久| 久久九九久久九九| 亚洲图色在线| 亚洲精品专区| 在线播放视频一区| 国产日韩欧美在线视频观看| 欧美三级特黄| 欧美成人精品激情在线观看| 欧美一区二区在线观看| 在线亚洲一区| 最新中文字幕一区二区三区| 久久中文在线| 久久av红桃一区二区小说| 亚洲欧美日韩一区二区三区在线| 在线欧美一区| 韩国三级电影一区二区|