組合模式(Composite)-結構型模式

我們在開發過程中經常使用到樹形結構,它分爲葉子節點和和分支節點兩種,客戶對象在使用這兩種對象時候經常要對它們加以區別,增加了代碼的複雜度,也非常容易出錯。組合模式爲這兩種類型提供了統一的接口,可以讓我們像操作葉子節點那樣方便地操作分支節點。 

======================================================================================================================================

關於組合模式,GoF 給出的定義是:

Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.

將對象組合成樹形結構來表現部分-整體的層次關係。組合使得客戶一致地使用單個對象和組合對象。

要使客戶程序對分支節點和葉子節點進行一樣的操作,那麼它們外形必須一樣,即得有相同的接口隱藏具體實現,下面我們先從 UML 靜態類圖入手。 


======================================================================================================================================

安全的組合模式 


======================================================================================================================================

透明的組合模式 


======================================================================================================================================

安全的組合模式VS透明的組合模式

安全的組合模式編譯時就可以發現爲葉子節點執行add等無意義的管理子節點的操作,但造成了LeafComposite接口不一致,損失了透明性。透明的組合模式只有在運行時纔可能(如果不忽略的這些無意義調用的話)暴露錯誤地使用葉子節點的操作,犧牲了安全性,具有良好的透明性。這二者各有優缺點,讀者在實際編程中需要自己權衡來決定應該使用哪種方式。

======================================================================================================================================

android中的例子



--------------以上摘自《漫談設計式》+ http://www.cnblogs.com/qianxudetianxia/archive/2011/07/29/2121488.html


總結:

當我們需要處理的對象本身包含與自身屬性相同的子對象時,我們就應該使用組合模式。如一個View 可以包含其他子View ,一個公司可以包含分公司,一個數組可以包含子數組,像這種類型的對象,形成了樹形結構,我們定義統一的接口就可以方便地操作對象及對象組合。



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