首先要道歉一下,我看書的速度真的太慢了...
總之目前進入了第一大單元 - 創建(Creation)
顧名思義的它就是要教你怎麼用好的方式去建立一個Class
由於裡面內容牽扯到大量豬屎排程(Design Patterns)
不熟的人還請搭配書本服用
在我們建立一系列有繼承關係的Class,例如State Node
會很直覺的想要建立一個Factory來統一建立的介面
這樣做除了可以統一Client端呼叫建立的介面之外
維護起來也會比較簡單(不用到處東找西找)
但是怎麼建立那個Factory卻是個大學問
首先是Factory的介面
一般來說,以建立AI的例子來講,如下:
ksAI *pAI = AIFactory->CreateAI();
假如今天想要建立不同種類的怪物AI呢?
ksAI *pAI = AIFactory->CreateAI( iAIType );
複雜一點,建立AI的時候必須給他一些初始值:
ksAI *pAI = AIFactory->CreateAI( iAIType, iInitHP );
好像不夠,產生器需要生產的種類跟速度,有些怪物一開始要隱形
有些怪物需要Ragdoll Model:
ksAI *pAI = AIFactory->CreateAI( iAIType, iInitHP,
iChildType, fGeneraeSpeed, bVisiable,
sRagdollModelName...... );
是不是開始覺得複雜起來?因為初始值的種類太多了
當然你可以把初始值的資料包裝成Class或是Structure
但是總覺得包裝起來很麻煩,還要多建立一個物件,是否有其他方式呢?
書上提供一種Creation Method的方法
簡單來說就是對建構子(Constructor)作封裝的動作
例如我們確定了怪物的大分類,可以把介面再細分一下:
ksAI *pNormalAI = AIFactory->CreateNormalAI( iAIType,
iInitHP, bVisiable);
ksAI *pGeneratorAI = AIFactory->CreateGeneratorAI( iAIType,
iInitHP, iChildType, fGeneraeSpeed);
ksAI *pRagdollAI = AIFactory->CreateRagdollAI( iAIType, iInitHP,
sRagdollModelName);
這樣一來一方面你可以很清楚知道你建立了哪個種類的AI
另一方面還可以簡化和控制傳入的參數數量
並且把子類別的建構子也封裝了起來
- Aug 13 Wed 2008 01:28
Refactoring to Patterns~Creation~Factory
close
全站熱搜
留言列表
發表留言