Mediator(中介者)--对象行为型模式
Mediator(中介者)–對象行為型模式
一、意圖
用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯示地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。
二、動機
1.在軟件構建過程中,經常會出現多個對象相互關聯交互的情況,對象之間常常會維持一種復雜的引用關系,如果遇到一些需求的更改,這種直接的引用關系將面臨不斷的變化。
2.在這種情況下,我們可使用一個“中介對象”來管理對象間的關聯關系,避免相互交互的對象之間的緊耦合引用關系,從而更好地抵御變化。
三、適用性
1.一組對象以定義良好但是復雜的方式進行通信。產生的相互依賴關系結構混亂且難以理解。
2.一個對象引用其他很多對象并且直接與這些對象通信,導致難以復用該對象。
3.想定制一個分布在多個類中的行為,而又不想生成太多的子類。
四、結構
五、效果
1.減少了子類生成 Mediator將原本分布于對歌對象間的行為集中在一起。改變這些行為只需生成Mediator的子類即可。這樣各個Colleague類可被重用。
2.它將各Colleague解耦 Mediator有利于各Colleague間的松耦合,你可以獨立的改變和復用各Colleague類和Mediator類。
3.它簡化了對象協議 Mediator和各Colleague間的一對多的交互替代多對多的交互。一對多的關系更易于理解、維護和擴展。
4.它對對象如何協作進行了抽象 將中介作為一個獨立的概率并將其封裝在一個對象中,使你將注意力從對象各自本身的行為轉移到它們之間的交互上來。這有助于弄清楚一個系統中的對象是如何交互的。
5.它使控制集中化 中介者模式將交互的復雜性變為中介者的復雜性。因為中介者封裝了協議,它可能變得比任何一個Colleague都復雜。這可能使得中介者自身成為一個難于維護的龐然大物。
六、實現
1.忽略抽象的Mediator類 當各Colleague僅與一個Mediator一起工作時,沒有必要定義一個抽象的Mediator類。Mediator類提供的抽象耦合已經使各Colleague可與不同的Mediator子類一起工作,反之亦然。
2.Colleague——Mediator通信 當一個感興趣的事件發生時,Colleague必須與其Mediator通信。一種實現方法是使用Observer模式,將Mediator實現為一個Observer,各Colleague作為Subject,一旦其狀態改變就發送通知給Mediator。Mediator作出的響應是將狀態改變的結果傳播給其他的Colleague。
七、要點總結
1.將多個對象間復雜的關聯關系解耦,Mediator模式將多個對象間的控制邏輯進行集中管理,變“多個對象相互關聯”為“多個對象和一個中介者關聯”,簡化了系統的維護,抵御了可能的變化。
2.隨著控制邏輯的復雜化,Mediator具體對象的實現可能相當復雜。這時候可以對Mediator對象進行分解處理。
3.Facade模式是解耦系統間(單向)的對象關聯關系;Mediator模式是解耦系統內各個對象之間(雙向)的關聯關系。
八、相關模式
Facade與中介者的不同之處在于它是對一個對象子系統進行抽象,從而提供了一個更為方便的接口。它的協議是單向的,即Facade對象對這個子系統類提供請求,但反之則不行。相反,Mediator提供了各Colleague對象不支持或不能支持的協作行為,而且協議是多向的。
Colleague可使用Observer模式與Mediator通信。
九、舉例說明
協調各個同事間的工作。
本文為李建忠設計模式視頻的筆記以及《設計模式-可復用面向對象的軟件的基礎》和自己的部分見解
總結
以上是生活随笔為你收集整理的Mediator(中介者)--对象行为型模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机QQ如何恢复3年前的聊天记录手机如何
- 下一篇: 怎样推广新开的淘宝店淘宝新开店铺怎么推广