🎯 什麼情境該想到我

當你「有一群物件彼此多對多地直接參照、互相呼叫,關係盤根錯節、牽一髮動全身」的時候(例如對話框裡一堆控制項互相連動、聊天室成員彼此傳訊、航管協調多架飛機)。

⚙️ 怎麼用(步驟 / 公式)

意圖:用一個中介物件來封裝一組物件如何互動。中介者使各物件不需彼此直接參照,從而降低它們之間的耦合,並能獨立地改變它們之間的互動。

主要參與者 / 結構:

  • Mediator(中介者介面):定義各同事物件與中介者溝通的介面。
  • ConcreteMediator(具體中介者):知道並協調所有同事物件,統籌轉發訊息。
  • Colleague(同事物件):每個同事只持有中介者的參照,需要與別人互動時一律透過中介者,不直接找對方。

做法要點:

  1. 找出物件間那些網狀的直接呼叫,抽出來集中到一個中介者。
  2. 每個同事發生狀態變化或事件時,只通知中介者。
  3. 由中介者決定該通知哪些同事、如何連動。
  4. 於是同事之間從「多對多」變成各自「對一個中介者」。

🧪 我實際套用的紀錄

  • (待填)

⚠️ 注意 / 什麼時候不適用

  • 中介者容易越長越大,把所有互動邏輯都吸進去,變成難維護的「上帝物件」。
  • 把複雜度從物件間的關係搬到中介者身上,只是換地方,若互動本身就複雜仍難簡化。
  • 若物件間互動很少或很單純,直接互相呼叫更清楚,別硬加中介層。

🔗 相關工具