Mediator Pattern仲介者模式

Bear熊
3 min readApr 17, 2020

仲介者模式又稱「調停者模式」。其實就是中間人或者調停者的意思。

大話設計書中舉例:各國之間溝通不直接溝通 而是透過聯合過這樣的組織。

仲介者模式:用一個仲介物件來封裝一系列的物件互動。仲介者始個物件不需要顯示地互相參考,從而使其偶和鬆散,而且可以獨立地改變他們之間的互動。

ConcreteMediator 是具體的知道 ConcreColleague1 跟 ConcreColleague2的。

所以使用上類似這樣

Class ConcreteMediator : Mediator{
ConcreColleague1 colleague1;
ConcreColleague2 colleague2;
...
public override void Send(string message, Colleague colleague){
if(colleague == colleague1)
colleague2.Notify(message)
else
colleague1.Notify(message)
}
}
//
ConcreColleague1: Colleague{
...
public void Send(string message){mediator.Send(message,this);}
}//////實際使用
ConcreteMediator m = new ConcreteMediator();
ConcreColleague1 c1 = new ConcreColleague1(m); //這邊有把仲裁者傳進去
ConcreColleague1 c2 = new ConcreColleague2(m);
m.Colleague1 = c1;
m.Colleague2 = c2;
c1.Send("吃過沒");
c2.Send("吃過");

優缺點

容易應用但是也容易誤用此設計。當系統出現了「多對多」互動複雜的物件群時,不要急於使用仲介者模式,而要先反省你的系統在設計上是不是合理。

優點

  1. 減少 Colleague耦合 (把關連改到Mediator)
  2. 把物件互動抽到Mediator可以幫助思考(書中以:更宏觀的角度看待系統)

優點在於集中控制(Mediator)但是缺點也是

https://upload.wikimedia.org/wikipedia/commons/9/92/W3sDesign_Mediator_Design_Pattern_UML.jpg

這張圖很好的解釋了此設計特性

來自維基百科

--

--