1. 程式人生 > 其它 >設計模式 —— 中介者模式

設計模式 —— 中介者模式

中介者也屬於“介面隔離”模式中的一種。

動機

  • 在軟體構建中,會出現多個物件相互關聯互動的情況,物件之間常常會維持一種複雜的引用關係,如果遇到一些需求的更改,這種直接的引用關係將面臨不斷的變化。
  • 在這種情況下,我們可以使用一個“中介物件”來管理物件間的關聯關係,避免相互互動物件之間的緊耦合引用關係,從而更好地抵禦變化。

模式定義

用一箇中介物件來封裝(封裝變化)一系列的物件互動。中介者使各物件不需要顯式的相互引用(編譯時依賴—>執行時依賴),從而使其耦合鬆散(管理變化),而且可以獨立地改變它們之間的互動。 ——《設計模式》GOF

依賴結構關係

colleage中有一個指標指向Mediator,ConcreteMediator中又有指標指向不同的ConcreteColleague,ConcreteColleague1、2之間不會相互依賴。該結構圖只表示依賴關係,實際上Colleague和ConcreteColleague也可能不是繼承關係

通過Mediator隔離,左邊1、3物件的直接依賴關係轉變為右邊的1、3物件的間接依賴關係。Facade解決的是系統內與系統外之間的隔離,而Mediator解決的是系統內物件之間的隔離。中介者一定是在多個物件相互關聯的情況下使用。

中介者模式是依賴倒置原則(A依賴B --> A依賴IB, B依賴IB)在多個物件場景下的擴充套件。

要點總結

  • 將多個物件間複雜的關聯關係解耦, Mediator模式將多個物件間的控制邏輯進行集中管理,變“多個物件互相關聯"為“多個物件和一箇中介者關聯”,簡化了系統的維護,抵禦了可能的變化。
  • 隨著控制邏輯的複雜化, Mediator具體物件的實現可能相當複雜。這時候可以對 Mediator物件進行分解處理。
  • Facade模式是解耦系統間(單向)的物件關聯關係; Mediator模式是解耦系統內各個物件之間(雙向)的關聯關係。