iT邦幫忙

第 12 屆 iThome 鐵人賽

1

本文同步更新於blog

Composite Pattern

允許將對象組合成樹形結構來表現整體/部分層次結構。

組合能讓客戶以一致的方式處理個別對象以及對象組合。


組合模式會將類別分為兩類:
分別是枝節點類別 (Composite)葉節點類別 (Leaf)

其中葉節點類別沒有子節點。


根據 組合介面 (Component) 設計的不同,又可分出兩種類型。

  • 透明方式 (uniformity)
    於介面宣告管理子物件的方法 (Add, Remove),
    使得 枝節點類別 (Composite)葉節點類別 (Leaf) 沒有區別。
    缺點為 葉節點類別 (Leaf) 本身不具備管理子物件的方法,實現它是沒有意義的。

  • 安全方式 (type safety)
    不於介面宣告管理子物件的方法,而是在 枝節點類別 (Composite) 中宣告。
    缺點為客戶端調用時須增加對應的判斷。


優點
面對樹形架構時,能夠使用多態性遞迴性的作法。

缺點
由於介面須同時滿足枝節點與葉節點,會使程式碼複雜度提高。


與其他模式的比較:

[迭代器模式]:
運用組合模式,可以與迭代器模式產生良好的協同作用。

[解譯器模式]:
兩者有著類似下表的對應關係。

解譯器模式 組合模式
終端表達式 (Terminal Expression) 葉節點類別 (Leaf)
非終端表達式 (NonTerminal Expression) 枝節點類別 (Composite)

[裝飾者模式]:
裝飾者模式只有一個裝飾過後的物件。
而組合模式有著許多個物件。


ʕ •ᴥ•ʔ:組合模式的目的就是實現樹形結構。


上一篇
Day46. 範例:摩斯電碼 (解譯器模式)
下一篇
Day48. 範例:生物分類學(組合模式)
系列文
你終究都要學設計模式的,那為什麼不一開始就學呢?57
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言