Cocosd-x設計模式之六 :組合模式

      這一篇博文中將要來學習cocos2d-x常用設計模式之五:組合模式,他在遊戲的設計過程中使用的可能較少,但在cocos2d-x的引擎源碼中,此模式卻得到了大範圍的使用,例如CCScene、CCLayer、CCNode派生類等共同組成了一個樹形結構,同時我們可以以一致地方式來處理這些類,比如addChild、removeChild和getChildren。處理“整體-部分關係”(通常是樹形結構),並且能夠以一致地方式來對待整體部分,這正是組合模式的應用場景。

【轉載自子龍山人】:http://zilongshanren.com/blog/2012/11/05/cocos2d-x-design-patterns-7-composite/


在開始挖掘cocos2d-x裏面的組合模式之前,我武斷地下個結論:

“幾乎所有與GUI相關的框架設計都應用了組合設計模式”。(PS:大家注意我的用詞,是“幾乎所有”,給自己留條後路,哈哈)

1、應用場景

Cocoa編程框架APPKit和UIKit都應用了組合模式,各種各樣的View及其派生類組成了一棵樹狀結構的層級視圖,而這裏面就應用了組合模式。當然,Cocos2D-x裏面的Node組織方式也採用的是這個方法,最終遊戲界面中的Nodes也會形成一棵樹。

說到樹,我們馬上就會想到樹根,樹幹和樹葉。一棵樹一般只包含一個根,若干樹幹和大量的葉子。同時,樹幹長在樹根上,樹葉長在樹幹上。(PS:這有點廢話了,不過讀者莫急,耐着性着往下看。)對應於Cocos2d-x裏面,就是一個遊戲有一個主場景GameScene,它是樹根,然後它有若干個樹幹(GameLayer、HudLayer、InputLayer、BackgroundLayer和LevelLayer等),最後,每一個樹幹又包含若干個樹葉(比如sprite、particles、font、TiledMap nodes、etc)。

tree-nodes-labeled.png

說完了這些,你可能會問了,這跟組合模式有毛關係啊。好,組合模式正式登場!

cocos2d-x裏面的CCScene、CCLayer、CCNode派生類(不含CCLayer和CCScene)共同組成了一個樹形結構,同時我們可以以一致地方式來處理這些類,比如addChild、removeChild和getChildren。處理“整體-部分關係”(通常是樹形結構),並且能夠以一致地方式來對待整體與部分,這不正是組合模式的應用場景嗎。

2、使用該模式的優缺點

優點:

1)、優化處理遞歸或分級數據結構。

2)、一致地對待組合對象與單個對象,可以簡化客戶端調用

缺點:

1)、如果是透明實現的組合模式,單個對象也會包含組合對象的方法,這樣會給客戶端調用造成麻煩,因爲單個對象實際上是不會實現這些組合對象的方法的。

3、模式定義及一般實現

模式定義:

將對象組合成樹形結構以表示“部分整體”的層次結構。組合模式使得用戶對單個對象和使用具有一致性。

UML類圖:

600px-Composite_UML_class_diagram_fixed.

一般實現:參考這篇文章

4、遊戲開發中如何運用此模式

因爲遊戲開發不是設計框架,基本上使用組合模式的情形不多。但是,如果有遞歸或者樹形結構的對象關係,都可以考慮使用組合模式。

5、與其它模式的關係

暫不討論



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章