提供乙個中介物件出來,用於封裝一系列物件的互動,從而使各物件不需要直接互動,進一步降低了物件間的耦合度。這是一種行為型設計模式。
由此可見,中介者模式主要解決的是物件間所存在的大量關係,我們都知道,物件間一旦關聯緊密,必然會導致系統的複雜性增加,一旦某個物件有所修改,其關聯物件也有可能會有跟著更改,這自然不是我們所希望的。有些朋友可能會說,如果互動很多,是不是可以將物件合併,從某種角度上來說,我們可以考慮物件合併。但是,我們並不能這樣去做,因為物件存在的層級可能是不同的,有些是處理資料互動的,有些是處理業務級的,合併起來會導致系統層次不明,引入更大的風險。
在現實生活中,中介者更多的體現為排程平台或者房產中介,再或者就是紅娘了。我們以紅娘為例,
程式設計師找個女朋友實在是太難,而且時間也不多,圈子也不大,乙個乙個去認識,鬼知道哪乙個要找物件的,耗費精力不說,尼瑪,還少敲了好幾段**。所以,一般通過紅娘會更方便一點,會使得我們的目的更加明確,就是找物件,篩選、資訊收集、匹配的事情交給紅娘做就好了。畢竟紅娘可是掌握著很多女孩子的資訊及其擇偶要求的,程式設計師過去把資訊或者要求填寫一下即可,紅娘幫你匹配合適的女孩子,一旦有較高的匹配度,就可以約會見見了,說不准很快就成了,這樣**沒少敲,物件也不耽誤找,是不是很爽……
以上,我們可以發現,在中介者模式裡面,中介者承擔的職能主要包括:uml描述的是程式設計師相親的例子
通過以上uml圖,我們可以知道,中介者模式主要有以下幾個角色接下來我們以程式設計師找物件為例,這裡的中介者就是程式設計師與妹子之間協調的紅娘了,來看看如何通過**編寫mediator: 抽象中介者。定義了同事物件與中介者物件進行互動的介面。
concretemediator: 具體中介者,實現抽象中介者的方法。
colleague: 抽象同事類。
concretecolleague: 具體同事類。每個具體同事類都只需要知道自己的行為即可,他們是直接與中介者打交道的類。
核心邏輯**:
1:///
2:/// 抽象中介者
3:///
4:public
abstract
class mediator
5:
11:
12:///
13:/// 抽象同事類
14:///
15:public
abstract
class colleague
16:
25:
26:public
abstract
void communication(string msg);
27: }
28:
29:///
30:/// 媒婆或者說是紅娘
31:///
32:
33:public
class matchmaker : colleague
34:
38:
39:public
void blinddate()
40:
43:
44:public
override
void communication(string msg)
45:
48: }
49:
50:///
51:/// 相親者
52:///
53:
54:public
class programmer : colleague
55:
59:
60:public
void blinddate()
61:
64:
65:public
override
void communication(string msg)
66:
69: }
70:
71:///
72:/// 這裡就是中介機構了,暫且叫做結婚吧,作為乙個中介結構,裡面的資訊是完全的
73:///
74:
75:public
class marrymediator : mediator
76:
81: }呼叫:
1:class program
2:
17: }執行結果:
就這樣,讓人期待已久的相親開始了,後面的事情,就交給程式設計師自己發揮了
優點:中介者模式簡化並理清了物件間的關係,降低了類本身的複雜度,鬆散了物件間的耦合中介者模式,比較適合處理比較穩定的場景,對於一組定義比較良好的物件,預期可變性不是那麼強,想通過乙個中間類來封裝多個類中的行為,而又不想生成太多的子類。 比如在ddd領域驅動中,服務層與領域物件的互動就是乙個非常穩定的場景,在這個場景裡中介者模式得到了比較廣泛的運用。缺點:中介者本身承擔著太過沉重的職責,以至於中介者掛掉,可能系統也會掛掉
設計模式之中介者模式
1 抽象中介者,mediator 抽象中介 author jin.li public abstract class mediator2 具體的中介者,主機板 主機板中介 author jin.li public class mainboard extends mediator if colleagu...
設計模式之中介者模式
中介者模式 假如沒有總經理,下面六個個部門,財務部 市場部 研發部,財務部要發工資,讓大家核對公司需要跟市場部和研發部都通氣,市場部要接個新專案,需要研發部門處理技術,需要財務部出資金,市場部跟各個部門打交道,雖然只有六個個部門,但是關係非常亂 實際上,公司有總經理,各個部門有什麼事情都通報給總結裡...
設計模式之中介者模式
嘮叨幾句 設計模式的案例我已經寫過大部分的案例,但是本人沒有經常寫部落格的習慣,最近在將本人之前在碼雲上的案例直接搬過來 個人感覺容易和外觀模式弄混,所以在這裡做下簡單的比較 外觀模式 本質封裝互動,組合呼叫。就是向外部提供一組功能,但是具體的實現比較複雜,內部有喝多的元件相互組合呼叫,強調的是外觀...