C++(設計模式):21---行爲型模式之中介者模式(Mediator)

行爲型模式概述

  • 行爲模式涉及到算法和對象間職責的分配。行爲模式不僅描述對象或類的模式,還描述它們之間的通信模式。這些模式刻劃了在運行時難以跟蹤的複雜的控制流。它們將你的注意 力從控制流轉移到對象間的聯繫方式上來
  • 行爲類模式使用繼承機制在類間分派行爲。其中包括兩個這樣的模式:
    • 其中TemplateMethod較爲簡單和常用。模板方法是一個算法的抽象定義,它逐步地定義該算法, 每一步調用一個抽象操作或一個原語操作,子類定義抽象操作以具體實現該算法
    • 另一種行爲類模式是Interpreter。它將一個文法表示爲一個類層次,並實現一個解釋器作爲這些類的實例上的一個操作
  • 行爲對象模式使用對象複合而不是繼承。一些行爲對象模式描述了一組對等的對象怎樣 相互協作以完成其中任一個對象都無法單獨完成的任務。這裏一個重要的問題是對等的對象 如何互相瞭解對方。對等對象可以保持顯式的對對方的引用,但那會增加它們的耦合度。在 極端情況下,每一個對象都要了解所有其他的對象。 Mediator在對等對象間引入一個mediator對象以避免這種情況的出現。mediator提供了鬆耦合所需的間接性
  • Chain of Responsibility提供更鬆的耦合。它讓你通過一條候選對象鏈隱式的向一個對 象發送請求。根據運行時刻情況任一候選者都可以響應相應的請求。候選者的數目是任意的, 你可以在運行時刻決定哪些候選者參與到鏈中
  • Observer模式定義並保持對象間的依賴關係。典型的Observer的例子是Smalltalk中的模型/視圖/控制器,其中一旦模型的狀態發生變化,模型的所有視圖都會得到通知
  • 其他的行爲對象模式常將行爲封裝在一個對象中並將請求指派給它:
    • Strategy模式將 算法封裝在對象中,這樣可以方便地指定和改變一個對象所使用的算法
    • Command模式 將請求封裝在對象中,這樣它就可作爲參數來傳遞,也可以被存儲在歷史列表裏,或者以其 他方式使用
    • State模式封裝一個對象的狀態,使得當這個對象的狀態對象變化時,該對象可改變它的行爲
    • Visitor封裝分佈於多個類之間的行爲
    • 而Iterator則抽象了訪問 和遍歷一個集合中的對象的方式
  • 行爲型模式有:

一、意圖

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

二、動機

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

三、適用性

  • 在下列情況下使用中介者模式:
    • 一組對象以定義良好但是複雜的方式進行通信。產生的相互依賴關係結構混亂且難以理 解
    • 一個對象引用其他很多對象並且直接與這些對象通信 ,導致難以複用該對象
    • 想定製一個分佈在多個類中的行爲,而又不想生成太多的子類

四、結構

  • 一個典型的對象結構可能如下圖所示

五、參與者

  • Mediator(中介者) :中介者定義一個接口用於與各同事(Colleague)對象通信
  • ConcreteMediator(具體中介者) :
    • 具體中介者通過協調各同事對象實現協作行爲
    • 瞭解並維護它的各個同事
  • Colleague class(同事類):
    • 每一個同事類都知道它的中介者對象
    • 每一個同事對象在需與其他的同事通信的時候,與它的中介者通信。

六、協作

  • 同事向一箇中介者對象發送和接收請求。中介者在各同事間適當地轉發請求以實現協作 行爲

七、效果

  • 待續(學習到的時候再回來補)

八、實現

  • 待續(學習到的時候再回來補)

九、代碼示例

  • 待續(學習到的時候再回來補)

十、相關模式

  • Facade與中介者的不同之處在於它是對一個對象子系統進行抽象,從而提供了一個 更爲方便的接口。它的協議是單向的,即Facade對象對這個子系統類提出請求,但反之則不 行。相反,Mediator提供了各Colleague對象不支持或不能支持的協作行爲,而且協議是多向 的。
  • Colleague可使用O b s e r v e r模式與Mediator通信
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章