Java設計模式(十六):組合模式

組合模式(composite pattern)

組合模式(composite pattern):屬於對象的結構型模式。將對象組合成樹形結構以表示‘部分-整體’的層次結構。組合模式使得用戶對單個對象和組合對象的使用具有一致性。


組合模式UML圖

Java設計模式(十六):組合模式

Java


組合模式涉及的角色

抽象構件(Component)角色:組合中的對象聲明接口,在適當情況下,實現所有類共有接口的默認行爲。聲明一個接口用於訪問和管理 Component 的子不部件樹葉構件(Leaf)角色:在組合中表示葉節點對象,葉節點沒有子節點樹枝構件(Composite)角色:定義有枝節點行爲,用來存儲子部件,在 Component 接口中實現與子部件有關的操作,比如 增加 add 和刪除 remove


組合模式的實現方式

  • 透明方式

要求在 Component 中申明所有的管理方法,如: add 和 remove 方法,所有實現 Component 類的子類都實現了這些管理方法。這樣做的好處是無論是樹葉節點還是樹枝節點對於外界是沒有區別的,它們具備完全一致的行爲接口。但問題也很明顯,因爲 樹葉節點(Leaf)本身並不具備管理方法的功能,所以實現它是沒有意義的。

  • 安全方式

也就是在 Component 類中不去聲明 add 和 remove 方法,那麼子類的 Leaf 也就不需要去是實現它,而是在 Composite 類聲明所有用來管理子類的對象的方法,這樣做就不會出現透明方式的問題,不過由於不透明,所以樹葉和樹枝類將不具有相同的接口,客戶端調用需要作出相應的判斷,帶來了不變。

在組成模式中,建議多采用透明方式


示例代碼

抽象構建類 Component

Java設計模式(十六):組合模式

Java

樹葉構件類 Leaf

Java設計模式(十六):組合模式

Java

樹枝構件類 Composite

Java設計模式(十六):組合模式

Java

客戶端測試類 TestCompositePattern

Java設計模式(十六):組合模式

Java學習資料獲取(複製下段連接至瀏覽器即可)

data:text/html;charset=UTF-8;base64,5p625p6E5biI5a2m5Lmg6LWE5paZ5YWN6LS56aKG5Y+W6K+35Yqg5omj5omj5Y+35pivMTAxODkyNTc4MA==


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