設計模式之中介者模式

2022-01-15 03:08:28 字數 3269 閱讀 2339

提供乙個中介物件出來,用於封裝一系列物件的互動,從而使各物件不需要直接互動,進一步降低了物件間的耦合度。這是一種行為型設計模式。

由此可見,中介者模式主要解決的是物件間所存在的大量關係,我們都知道,物件間一旦關聯緊密,必然會導致系統的複雜性增加,一旦某個物件有所修改,其關聯物件也有可能會有跟著更改,這自然不是我們所希望的。有些朋友可能會說,如果互動很多,是不是可以將物件合併,從某種角度上來說,我們可以考慮物件合併。但是,我們並不能這樣去做,因為物件存在的層級可能是不同的,有些是處理資料互動的,有些是處理業務級的,合併起來會導致系統層次不明,引入更大的風險。

在現實生活中,中介者更多的體現為排程平台或者房產中介,再或者就是紅娘了。我們以紅娘為例,

程式設計師找個女朋友實在是太難,而且時間也不多,圈子也不大,乙個乙個去認識,鬼知道哪乙個要找物件的,耗費精力不說,尼瑪,還少敲了好幾段**。所以,一般通過紅娘會更方便一點,會使得我們的目的更加明確,就是找物件,篩選、資訊收集、匹配的事情交給紅娘做就好了。畢竟紅娘可是掌握著很多女孩子的資訊及其擇偶要求的,程式設計師過去把資訊或者要求填寫一下即可,紅娘幫你匹配合適的女孩子,一旦有較高的匹配度,就可以約會見見了,說不准很快就成了,這樣**沒少敲,物件也不耽誤找,是不是很爽……

以上,我們可以發現,在中介者模式裡面,中介者承擔的職能主要包括:

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...

設計模式之中介者模式

中介者模式 假如沒有總經理,下面六個個部門,財務部 市場部 研發部,財務部要發工資,讓大家核對公司需要跟市場部和研發部都通氣,市場部要接個新專案,需要研發部門處理技術,需要財務部出資金,市場部跟各個部門打交道,雖然只有六個個部門,但是關係非常亂 實際上,公司有總經理,各個部門有什麼事情都通報給總結裡...

設計模式之中介者模式

嘮叨幾句 設計模式的案例我已經寫過大部分的案例,但是本人沒有經常寫部落格的習慣,最近在將本人之前在碼雲上的案例直接搬過來 個人感覺容易和外觀模式弄混,所以在這裡做下簡單的比較 外觀模式 本質封裝互動,組合呼叫。就是向外部提供一組功能,但是具體的實現比較複雜,內部有喝多的元件相互組合呼叫,強調的是外觀...