Skip to content

組合模式

組合模式核心概念

  • 將多個小物件組成大物件
  • 每個小物件具有相同的介面
  • 以樹狀的方式進行組合

它的結構圖會類似於

classDiagram
  class Component {
    +operation()
  }

  class Leaf {
    +operation()
  }

  class Composite {
    -children: Component[]
    +add(component: Component)
    +remove(component: Component)
    +operation()
  }

  Component <|-- Leaf
  Component <|-- Composite

組合模式特別適用於需要樹狀結構的需求,它可以透過統一的介面處理個別元素,從而簡化程式碼,也使開發者更易於理解、維護,甚至是擴充系統,這種設計方法也符合物件導向中的開閉原則(Open/Closed Principle)。以下是一些使用到組合模式觀念的案例:

HTML

在 HTML 中,DOM(Document Object Model)就是一個典型的組合模式的應用。HTML 文件可以被看作是一個樹狀結構,由各種元素(如 <div>、<p>、<span> 等)組成,而每個元素都可以包含子元素或文本節點。這樣的樹狀結構可以被輕鬆地表示為一個組合模式。我們舉一個範例:

<html>
  <head>
    <title>組合模式示例 - HTML</title>
  </head>
  <body>
    <div>
      <p>段落1</p>
      <p>段落2</p>
      <div>
        <span>SPAN</span>
      </div>
    </div>
  </body>
</html>

在這個例子中,<html> 元素包含 <head><body> 子元素,而 <body> 元素包含了多個 <div><p>、和 <span> 子元素,形成了一個樹狀結構。這樣的結構使得我們可以以統一的方式處理 HTML 文件,並且可以輕鬆地新增、修改或移除元素,符合組合模式的特點。

Cocos 場景

在 Cocos Creator 中的場景亦是一種組合模式的應用,場景本身是由多個 Node 組成,每個 Node 可以包含其他 Node,形成了一個樹狀結構。這個組合結構使得開發者能夠以統一的方式管理場景中的各個元件,並在需要時輕鬆擴充或修改場景的功能。

關於 Node 實際的用法,請參考 Node & 坐標系統