🎯 什麼情境該想到我
當你「有一群物件彼此多對多地直接參照、互相呼叫,關係盤根錯節、牽一髮動全身」的時候(例如對話框裡一堆控制項互相連動、聊天室成員彼此傳訊、航管協調多架飛機)。
⚙️ 怎麼用(步驟 / 公式)
意圖:用一個中介物件來封裝一組物件如何互動。中介者使各物件不需彼此直接參照,從而降低它們之間的耦合,並能獨立地改變它們之間的互動。
主要參與者 / 結構:
- Mediator(中介者介面):定義各同事物件與中介者溝通的介面。
- ConcreteMediator(具體中介者):知道並協調所有同事物件,統籌轉發訊息。
- Colleague(同事物件):每個同事只持有中介者的參照,需要與別人互動時一律透過中介者,不直接找對方。
做法要點:
- 找出物件間那些網狀的直接呼叫,抽出來集中到一個中介者。
- 每個同事發生狀態變化或事件時,只通知中介者。
- 由中介者決定該通知哪些同事、如何連動。
- 於是同事之間從「多對多」變成各自「對一個中介者」。
🧪 我實際套用的紀錄
- (待填)
⚠️ 注意 / 什麼時候不適用
- 中介者容易越長越大,把所有互動邏輯都吸進去,變成難維護的「上帝物件」。
- 把複雜度從物件間的關係搬到中介者身上,只是換地方,若互動本身就複雜仍難簡化。
- 若物件間互動很少或很單純,直接互相呼叫更清楚,別硬加中介層。
🔗 相關工具
- 觀察者模式 Observer(中介者常用觀察者機制在同事間傳遞變化通知)
- 責任鏈模式 Chain of Responsibility(同樣想降低耦合,但責任鏈是接力傳遞、中介者是集中協調)
- 外觀模式 Facade(外觀是單向簡化子系統介面,中介者是雙向協調同事間互動)
- 工具-針對介面編程(同事只依賴 Mediator 介面)
- 工具-封裝變化點(把「物件間如何互動」封裝在中介者裡)
- 設計模式