中介者模式(mediator)(調停者模式),用乙個中介物件來封裝一系列的物件互動。中介者使各個物件不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立的改變它們之間的互動。
主要解決:物件與物件之間存在大量的關聯關係,這樣勢必會導致系統的結構變得很複雜,同時若乙個物件發生改變,我們也需要跟蹤與之相關聯的物件,同時做出相應的處理。
何時使用:多個類相互耦合,形成了網狀結構。
如何解決:將上述網狀結構分離為星型結構。
例:
中介者模式uml結構圖:
例:mvc 框架,其中c(控制器)就是 m(模型)和 v(檢視)的中介者。
窗體的form物件(每個控制項之間的通訊都是依靠form物件完成的(通過事件機制進行通訊)(事件機制的執行是在form物件中完成的),這樣使得每個控制項內部不必關注與其他控制項的通訊,降低了耦合度)或者web介面aspx,以及想定製乙個分布在多個類中的行為,而又不想生成太多的子類的場合。
優點: 1、降低了類的複雜度,將一對多轉化成了一對一。 2、各個類之間的解耦。 3、符合迪公尺特原則。
缺點:中介者會龐大,變得複雜難以維護。
外觀(門面)模式與中介者模式的區別:
外觀(門面)模式關注的是這組複雜物件如何與外界通訊
中介者模式關注的是這組複雜物件之間的內部通訊
觀察者模式與中介者模式的聯絡:
可以組合使用,來實現當同事物件發生改變的時候,通知中介者物件,讓中介者物件去進行其他相關物件的互動。
例(聯合國與和平):
//聯合國機構
abstract class unitednations
//聯合國安全理事會
class unitednationssecuritycouncil : unitednations
}public iraq colleague2
}public override void declare(string message, country colleague)
else}}
//國家
abstract class country
}//美國
class usa : country
//宣告
public void declare(string message)
//獲得訊息
public void getmessage(string message)
}//伊拉克
class iraq : country
//宣告
public void declare(string message)
//獲得訊息
public void getmessage(string message)
}class program
}
設計模式 21 中介者模式
中介者模式 用乙個中介物件來封裝一系列的物件互動 中介者 就像我們在租房子一樣,有租房子的中介 抽象中介者 mediator package com.actionpattern.intermediary.edition1 抽象中介者 mediator public abstract class me...
19 中介者模式
中介者模式主要解決的問題 當有多個類之間有相互呼叫的關係時,如果將這些類相互關聯在一起,那麼當呼叫方式發生變化時,可能需要去每個類中去修改呼叫方式。這樣的修改會就會導致維護麻煩。中介者模式的根本還是做解耦。我在網上看了很多人解釋的中介者模式和他們的舉例,方式都不大一樣,但是根據自己的理解,中介者模式...
設計模式17 中介者模式
中介者模式 mediator pattern 是用來降低多個物件和類之間的通訊複雜性。這種模式提供了乙個中介類,該類通常處理不同類之間的通訊,並支援松耦合,使 易於維護。中介者模式屬於行為型模式。不應當在職責混亂的時候使用。建立中介類 聊天室,負責傳送通訊 include include inclu...