調停者模式(Mediator) 屬于對象的行為模式。
1. 定義
調停者模式包裝了一系列對象相互作用的方式,使得這些對象不必相互明顯作用。從而使他們可以松散偶合。當某些對象之間的作用發生改變時,不會立即影響其他的一些對象之間的作用。保證這些作用可以彼此獨立的變化。調停者模式將多對多的相互作用轉化為一對多的相互作用。調停者模式將對象的行為和協作抽象化,把對象在小尺度的行為上與其他對象的相互作用分開處理。
2. 使用的原因
當對象之間的交互操作很多,且每個對象的行為操作都依賴彼此時,為防止在修改一個對象的行為時,同時涉及到修改很多其他對象的行為,可采用調停者模式,來解決緊耦合問題.
該模式將對象之間的多對多關系變成一對多關系,調停者對象將系統從網狀結構變成以調停者為中心的星形結構,達到降低系統的復雜性,提高可擴展性的作用.
3. 適用的情況舉例
eg1. WTO組織:它是一個協調組織,它將各貿易區自行進行的相互協調的強耦合變成了松散合;
eg2. 4個MM打麻將,相互之間誰應該給誰多少錢算不清楚了,某人擔任調停者,各MM按照各自的籌碼數算錢,賺了錢的從調停者這里拿,賠了錢的也付給調停者;
eg3. 租賃中介:很多人有出租房子的需求,也有不少人需要租房,租賃中介在其中擔任了調停者的角色, 疏通了兩者之間的復雜關系,也方便了兩者。
4. 類圖結構及說明
1)示意性類圖如下所示:
2)類說明
i)Mediator:抽象調停者角色,它定義出同事對象到調停者對象得接口,這個角色一般由Java抽象類實現
ii)ConcreteMediator:具體調停者模式,從抽象調停者繼承,實現了超類所聲明的事件方法,它從具體同事對象接收消息,向具體同事對象發出命令.
iii)Colleague:抽象同事類角色,它定義了調停者同事對象的接口,它只知道調停者而不知道其余同事對象.
iv)colleague1、colleague2:具體同事類角色,從抽象同事類繼承而來,每個具體同事類都知道本身在小范圍內的行為,而不知道它在大范圍內的目的.
5. 使用舉例
1)需求
有次去佛山開發一個項目時,我們項目組要去現場開發,開發時間為一個月,PM打算到附近租個房子,但因對佛山不熟悉,而且因為只租一個月,很多房東都不愿意租,所以找個合適的房子真是難上加難。
2)分析
很多的房東需要出租自己的房子,而有很多的房客需要租房子,房屋需求和供給之間存在著錯綜復雜的關系,為解決這種錯綜復雜的關系,我們考慮運用弄個“中介者”出來,這樣房東和房客都只需要跟這個中介打交道,方便了兩者,嘻嘻,當時我們找了個房屋租賃中介,在短期內以2800元的價格租了個套間,當然還付出了不少的中介費:)
3)代碼參考實現
i)抽象同事類































ii) 具體同事類
a) 房東類










































iii)抽象調停者角色

































參考書籍:《Java與模式》
《Patterns in Java》