在現實生活中,常常會出現好多物件之間存在複雜的互動關係,這種互動關係常常是「網狀結構」,它要求每個物件都必須知道它需要互動的物件。例如,每個人必須記住他(她)所有朋友的**;而且,朋友中如果有人的**修改了,他(她)必須告訴其他所有的朋友修改,這叫作「牽一髮而動全身」,非常複雜。
如果把這種「網狀結構」改為「星形結構」的話,將大大降低它們之間的「耦合性」,這時只要找乙個「中介者」就可以了。如前面所說的「每個人必須記住所有朋友**」的問題,只要在網上建立乙個每個朋友都可以訪問的「通訊錄」就解決了。這樣的例子還有很多,例如,你剛剛參力口工作想租房,可以找「房屋中介」;或者,自己剛剛到乙個陌生城市找工作,可以找「人才交流中心」幫忙。
在軟體的開發過程中,這樣的例子也很多,例如,在 mvc 框架中,控制器(c)就是模型(m)和檢視(v)的中介者;還有大家常用的 qq 聊天程式的「中介者」是 qq 伺服器。所有這些,都可以採用「中介者模式」來實現,它將大大降低物件之間的耦合性,提高系統的靈活性。
模式的定義與特點中介者(mediator)模式
的定義:定義乙個中介物件來封裝一系列物件之間的互動,使原有物件之間的耦合鬆散,且可以獨立地改變它們之間的互動。中介者模式又叫調停模式,它是迪公尺特法則的典型應用。
中介者模式是一種物件行為型模式,其主要優點如下。
其主要缺點是:當同事類太多時,中介者的職責將很大,它會變得複雜而龐大,以至於系統難以維護。
模式的結構與實現中介者模式實現的關鍵是找出「中介者」,下面對它的結構和實現進行分析。
1. 模式的結構中介者模式包含以下主要角色。
中介者模式的結構圖如圖 1 所示。
圖1 中介者模式的結構圖
2. 模式的實現中介者模式的實現**如下:
程式的執行結果如下:
具體同事類1發出請求。具體同事類2收到請求。-------------具體同事類2發出請求。具體同事類1收到請求。模式的應用例項【例1】用中介者模式編寫乙個「韶關房地產交流平台」程式。
說明:韶關房地產交流平台是「房地產中介公司」提供給「賣方客戶」與「買方客戶」進行資訊交流的平台,比較適合用中介者模式來實現。
首先,定義乙個中介公司(medium)介面,它是抽象中介者,它包含了客戶註冊方法 register(customer member) 和資訊**方法 relay(string from,string ad);再定義乙個韶關房地產中介(estatemedium)公司,它是具體中介者類,它包含了儲存客戶資訊的 list 物件,並實現了中介公司中的抽象方法。
然後,定義乙個客戶(qistomer)類,它是抽象同事類,其中包含了中介者的物件,和傳送資訊的 send(string ad) 方法與接收資訊的 receive(string from,stringad) 方法的介面,由於本程式是窗體程式,所以本類繼承 jpmme 類,並實現動作事件的處理方法 actionperformed(actionevent e)。
最後,定義賣方(seller)類和買方(buyer)類,它們是具體同事類,是客戶(customer)類的子類,它們實現了父類中的抽象方法,通過中介者類進行資訊交流,其結構圖如圖 2 所示。
圖2 韶關房地產交流平台的結構圖
程式**如下:
程式的執行結果如圖 3 所示。
圖3 韶關房地產交流平台的執行結果
模式的應用場景前面分析了中介者模式的結構與特點,下面分析其以下應用場景。
模式的擴充套件在實際開發中,通常採用以下兩種方法來簡化中介者模式,使開發變得更簡單。
圖 4 所示是簡化中介者模式的結構圖。
圖4 簡化中介者模式的結構圖
程式**如下:
程式執行結果如下:
具體同事類1:發出請求...具體同事類2:收到請求。-----------------具體同事類2:發出請求...具體同事類1:收到請求。
中介者模式 詳解
是乙個行為設計模式,它允許我們公開乙個統一的介面,系統的不同部分可以通過該介面進行通訊,而不需要顯示的相互作用 該模式促進鬆散耦合的方式是 確保元件的互動是通過這個中心點來進行處理的,而不是通過顯示的引用彼此 抽象中介者 abstractmediator 定義中介者和各個同事者之間的通訊的介面 抽象...
中介者模式
1.中間 類 namespace intermediarypattern 成員物件需要知道是哪個中介者在通知它事情 public abstract class member 各成員間要傳送訊息 public abstract void send string msg 這個方法其實是具體實施發訊息的 ...
中介者模式
中介者模式就是在物件之間的關係很複雜時用,名如其人,就像租房的黑中介一樣,如果每個房東都拿著很多租房者的資訊很麻煩,每個租房者都要拿著很多房東的資訊也麻煩,所以需要乙個中介來拿著這些資訊,租房者只需要發出租房的請求,中介會給你介紹合適的房東,房東只需要提交房屋資料就等著中介的人帶著訪客看房拿錢就行了...