仲介者模式又稱「調停者模式」。其實就是中間人或者調停者的意思。
大話設計書中舉例:各國之間溝通不直接溝通 而是透過聯合過這樣的組織。
仲介者模式:用一個仲介物件來封裝一系列的物件互動。仲介者始個物件不需要顯示地互相參考,從而使其偶和鬆散,而且可以獨立地改變他們之間的互動。
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("吃過");
優缺點
容易應用但是也容易誤用此設計。當系統出現了「多對多」互動複雜的物件群時,不要急於使用仲介者模式,而要先反省你的系統在設計上是不是合理。
優點
- 減少 Colleague耦合 (把關連改到Mediator)
- 把物件互動抽到Mediator可以幫助思考(書中以:更宏觀的角度看待系統)
優點在於集中控制(Mediator)但是缺點也是
https://upload.wikimedia.org/wikipedia/commons/9/92/W3sDesign_Mediator_Design_Pattern_UML.jpg
這張圖很好的解釋了此設計特性
來自維基百科