首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

設計模式精講:中介者模式——將網狀依賴轉為星型結構的解耦藝術

     編輯:Java 相關知識

中介者模式用一個中介者對象封裝一系列對象交互,使各對象不顯式相互引用,從而降低耦合。它將網狀多對多依賴轉為星型一對多依賴,是處理複雜對象交互的利器。

一、 三大角色與交互重構

  • 抽象中介者:定義同事類通信接口,如 notify(Colleague, event)。
  • 具體中介者:實現協調邏輯,持有所有同事引用,路由消息。
  • 同事類:業務對象,持有中介者引用,通過中介者間接交互。

二、 從直接耦合到中介者協調

直接耦合版:A、B 互相持有引用,A.setNumber() 直接調用 B.setNumber(),修改擴散不可控。
中介者版:A、B 僅持有中介者引用,A.setNumber() 調用 mediator.AaffectB(),中介者統一協調 B 的變更。代碼見原文完整示例。

三、 結構對比:網狀 vs 星型

// 網狀:N 個對象最多 N*(N-1) 條依賴邊
A ↔ B, A ↔ C, B ↔ C, ...

// 星型:N 個對象僅 N 條依賴邊(指向中介者)
A → Mediator ← B
      ↓
      C

四、 優缺點與濫用警示

優點缺點
降低同事類耦合,符合迪米特法則中介者膨脹:邏輯過於集中,成為「上帝類」
簡化對象交互,易於理解維護間接性增加調試難度
交互邏輯集中,便於全局控制不適用於簡單/穩定的對象關係

濫用後果:將原本清晰的直接調用強行拆解,反而增加複雜度。原則:僅當對象間形成難以維護的網狀依賴時引入。

五、 適用場景

  • 多組件複雜交互的 GUI 對話框、表單驗證協調。
  • 航空管制系統、智能家居中控、遊戲實體交互管理。
  • 微服務網關層的請求路由/聚合編排。

六、 總結

中介者模式以「中心化協調」換取「去中心化耦合」。它是架構師手中的手術刀:用得好能化解依賴地獄,用不好會製造維護噩夢。決策前請量化:依賴邊數、變更頻率、團隊認知負荷。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved