分類

結構型模式。

這個模式在解決什麼

組合模式用來處理樹狀結構。它想解決的是:當單個對象和一組對象都應該被「當成一個節點來處理」時,如何提供統一的操作方式。

核心做法

做法是把系統中的元素分成兩種:

  • 葉子節點:不再包含子節點
  • 組合節點:內部持有多個子節點

但對外兩者都實作同一組接口。這樣客戶端就可以不區分「這是一個單體」還是「這是一組東西」,直接統一調用。

什麼時候適合用

只要資料天然帶有嵌套關係,就很容易想到組合模式,例如:

  • UI 節點樹
  • 場景節點樹
  • 檔案與資料夾
  • 分支對話

例子

如果一段對話既可能是一句單獨台詞,也可能是一個帶分支的對話節點,那就很適合用組合模式。

單句台詞可以是葉子節點,而某個分支下包含多個後續選項時,就把它當成組合節點。外部只需要對「節點」做操作,不必為單句和分支寫兩套流程。

類圖

這一篇先記住的重點

  • 組合模式的核心,是讓單體與集合都能被統一看待
  • 它非常適合樹狀資料結構
  • 客戶端通常只依賴抽象節點接口,而不區分葉子與組合

參考書目

《Head First Design Patterns》Eric Freeman, Elisabeth Robson, Kathy Sierra, Bert Bates