中介者模式對應的並不是生活中的中介,所以很多人拿房屋中介來理解這個模式反而感到違和。生活中與之對應的職業有點類似大廳經理。我們生活中的中介居多是個資訊平台,更多的是互相非同步的操作。大廳經理其實就是乙個對全部業務基本熟悉的人,你可以問他任何問題,他都會帶你去做相關業務,而不用你自己去找這個關係。例如你要存款,你可以先和大廳經理說,你要存款,他會帶你拿號,填寫單據,然後讓你等業務員等等。你可以很方便的通過他的服務完成你的業務,你也不用自己去關心具體銀行的流程是怎麼走的。假如沒有大廳經理的存在,你就需要熟悉銀行所有業務流程才能完成你的事情。
中介者明顯的優點就是減少了每個角色之間的耦合,原來乙個角色處理完乙個事件需要和5個角色做業務。現在就轉變成了和中介者的關係。所有的互動事件都是中介者完成的,每個角色只要處理好和自己相關的流程,極大的保證了單一原則。
中介者要處理多個角色直接的互動,所以這個角色就很重要了,隨著角色的增多,中介者要承擔的責任也就越大,膨脹起來就很麻煩了。
看如下類圖,colleague和mediator是乙個組合關係,中介者要管所有的角色。由於使用了組合,當colleague新增的時候,mediator就需要跟著改,當具體的流程變動的時候,mediator也要重寫,這個模式在應對變化上,復用程度很低。
這個模式使用出來更多希望的是不動,在高度抽象的框架流程裡是比較適合的。在具體的業務場景的話,需要根據業務場景來判斷,一般不穩定的業務場景還是考慮訊息機制吧,要不改動起來就會很頭疼。
很多人感覺這兩個模式很像,類圖上確實很相似,但是操作和使用起來差別是很大的。
1,關係不同。觀察者和被觀察者之間是可以使用介面或者抽象類的,一般是乙個list集合。中介者和角色之間主要是組合關係的,而且各個角色一般沒有什麼共同點去抽象,表現一般是具體的乙個個成員物件。
2,場景不同。觀察者模式一般是2者之間的關係,就是觀察者和被觀察者,每個觀察者之間其實是沒有關係的。中介者模式則是解決每個角色之間複雜關係存在的,每個角色是相互依賴的。
3,方法不同。觀察者模式要求被觀察者有加入,刪除,通知等方法。中介者模式確實需要根據具體的場景來定的,並沒有特別高度概括出的方法。
4,擴充套件不同。觀察者模式,如果想加入乙個觀察者就很簡單,加入後做關聯就好,邏輯並不會變的複雜,但是中介者模式想加入乙個新的角色,中介者就要改他的邏輯方法,適應新的邏輯。
中介者模式算是乙個調理相互邏輯的模式,因為有生活中的例子,所以理解起來相對簡單,但是在軟體這種處處存在著改動的行業上,使用的話就需要斟酌改動的情況,一般建議去使用觀察者這種訊息模式。在穩定的邏輯上,他確實也是不錯的選擇,能幫你更好的梳理物件直接的關係。
中介者模式
1.中間 類 namespace intermediarypattern 成員物件需要知道是哪個中介者在通知它事情 public abstract class member 各成員間要傳送訊息 public abstract void send string msg 這個方法其實是具體實施發訊息的 ...
中介者模式
中介者模式就是在物件之間的關係很複雜時用,名如其人,就像租房的黑中介一樣,如果每個房東都拿著很多租房者的資訊很麻煩,每個租房者都要拿著很多房東的資訊也麻煩,所以需要乙個中介來拿著這些資訊,租房者只需要發出租房的請求,中介會給你介紹合適的房東,房東只需要提交房屋資料就等著中介的人帶著訪客看房拿錢就行了...
中介者模式
中介者模式 mediator pattern 1 抽象中介者 mediator 角色 抽象中介者角色定義統一的介面用於各同事角色之間的通訊。具體中介者 concrete mediator 角色 具體中介者角色通過協調各同事角色實現協作行為,因此它必須依賴於各個同事角色。同事 colleague 角色...