天天看點

行為型設計模式: 中介者模式(Mediator Pattern)行為型設計模式: 中介者模式(Mediator Pattern)

行為型設計模式: 中介者模式(Mediator Pattern)

CSDN專欄: 設計模式(UML/23種模式)

行為型模式之中介者模式(Mediator Pattern): 用一個中介對象來封裝一系列的對象互動。中介者使各對象不需要顯式地互相引用,進而使其耦合松散,而且可以獨立地改變它們之間的互動。

中介者模式(Mediator Pattern)屬于行為型模式。行為型模式涉及到算法和對象間職責的配置設定;行為型模式不僅描述對象或類的模式,還描述它們之間的通信模式。行為型模式刻劃了在運作時難以跟蹤的複雜的控制流;它們将你的注意力從控制流轉移到對象間的聯系方式上來。行為型模式主要包括:Chain of Responsibility模式、Command模式、Interpreter模式、Iterator模式、Mediator模式、Memento模式、Observer模式、State模式、Strategy模式、Template Method模式和Visitor模式。行為型模式在某種程度上具有相關性。

模式簡介

GOF的《設計模式》指出Mediator模式的意圖是:

用一個中介對象來封裝一系列的對象互動。中介者使各對象不需要顯式地互相引用,進而使其耦合松散,而且可以獨立地改變它們之間的互動

面向對象設計鼓勵将行為分布到各個對象中。這種分布可能會導緻對象間有許多連接配接。在最壞的情況下,每一個對象都知道其他所有對象。雖然将一個系統分割成許多對象通常可以增強可複用性 , 但是對象間互相連接配接的激增又會降低其可複用性。大量的互相連接配接使得一個對象似乎不太可能在沒有其他對象的支援下工作—系統表現為一個不可分割的整體。而且 ,對系統的行為進行任何較大的改動都十分困難,因為行為被分布在許多對象中。災難來了,你可能不得不定義很多子類以定制系統的行為。

Mediator模式适用于以下場景:

  • 一組對象以定義良好但是複雜的方式進行通信, 産生的互相依賴關系結構混亂且難以了解。
  • 一個對象引用其他很多對象并且直接與這些對象通信, 導緻難以複用該對象。
  • 想定制一個分布在多個類中的行為,而又不想生成太多的子類。

模式圖解

Mediator模式的UML示例如下:

行為型設計模式: 中介者模式(Mediator Pattern)行為型設計模式: 中介者模式(Mediator Pattern)

Mediator模式的工作過程如下:

  • Mediator中介者定義一個接口用于與各同僚對象通信。
  • ConcreteMediator具體中介者通過協調各同僚對象實作協作行為。
  • Colleague每一個同僚類都知道它的中介者對象。同僚之間不直接通信,通過中介者間接通信。
  • Colleague向一個中介者對象發送和接收請求。中介者在各同僚間适當地轉發請求以實作協作

Mediator模式的有益效果如下:

  • 有利于減少了子類生成:Mediator将原本分布于多個對象間的行為集中在一起。
  • 有利于Colleague之間的解耦:Mediator有利于各Colleague間的松耦合。
  • 有利于簡化對象互動協定:用Mediator和各Colleague間的一對多的互動來代替多對多的互動。
  • 有利于簡化對象的協作:将中介作為一個獨立的概念并将其封裝在一個對象中,使你将注意力從對象各自本身的行為轉移到它們之間的互動上來。
  • 有利于控制集中化:中介者模式将互動的複雜性變為中介者的複雜性。

Facade模式與Mediator模式的不同之處在于它是對一個對象子系統進行抽象,進而提供了一個更為友善的接口。它的協定是單向的,即Facade對象對這個子系統類提出請求,但反之則不行。相反,Mediator提供了各Colleague對象不支援或不能支援的協作行為,而且協定是多向的。Colleague可使用Observer模式與Mediator通信。

模式執行個體

疊代器在面向對象系統中很普遍。大多數集合類庫都以不同的形式提供了疊代器。

流行的集合類庫Boost提供隊列(Queue)的固定大小和動态大小的兩種實作。隊列的接口由抽象的Queue類定義。為了支援多态疊代,隊列疊代器的實作基于抽象的Queue類接口。這樣做的優點在于,不需要每個隊列都實作一個Factory Method來提供合适的疊代器。

但是, 它要求抽象Queue類的接口的功能足夠強大以有效地實作通用疊代器。

系列文章

  • CSDN專欄: 設計模式(UML/23種模式)
  • Github專欄: 設計模式(UML/23種模式)

參考文獻

  • GOF的設計模式:可複用面向對象軟體的基礎
  • 設計模式之禅
  • 圖說設計模式

繼續閱讀