淺談設計模式之中介者模式

中介者模式(Mediator):用一箇中介物件來封裝一系列的物件互動。中介者使各物件不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的互動。

這個模式我們可以簡單的類比於星型結構,中介者就是中心,其他物件的互動都是通過中心的中介者作為媒介,而不是直接互動,這樣就避免了物件直接互動導致的關係混亂,不易維護的缺點。

UML圖如下:
這裡寫圖片描述

//抽象中介者類
abstract class Mediator
{
public abstract void Send(string message,Colleague colleague)
}
//抽象同事類
abstract class Colleague
{
protected Mediator mediator;
public Colleauge(Mediator mediator)
{
this.mediator = mediator;
}
}
//具體中介者類 
class ConcreteMediator : Mediator
{
public ConcreteColleauge1 colleague1;
public ConcreteColleauge2 colleague2;
public override void Send(string message, Colleague colleague)
{
if(colleague == colleague1)
{
colleague2.Notify(message);
}
else
{
colleague1.Notify(message);
}
}
}
//具體同事類  ConcreteColleague2類似 
class ConcreteColleague1 : Colleague
{
public ConcreteColleague1(Mediator mediator):base(mediator){}
public void Send(string message)
{
mediator.Send(message);
}
public void Notify(string message)
{
Print("同事1收到訊息");
}
}
//測試
static void Main(string[]args)
{
ConcreteMediator mediator = new ConcreteMediator();
ConcreteColleague1 c1 = new ConcreteColleague1();
ConcreteColleague2 c2 = new ConcreteColleague2();
mediator.colleague1 = c1;
mediator.colleague2 = c2;
//傳送訊息,其實都是通過mediator物件傳送的
c1.Send("第一則訊息");
c2.Send("第二則訊息");
Console.Read();
}

中介者模式一般應用於一組物件以定義良好但是複雜的方式進行通訊的場合,以及向定製一個分佈在多個類中的行為,而又不想生成太多子類的場合。

中介者模式的主要優點在於簡化了物件之間的互動,將各同事解耦,還可以減少子類生成,對於複雜的物件之間的互動,通過引入中介者,可以簡化各同事類的設計和實現。

中介者模式主要缺點在於具體中介者類中包含了同事之間的互動細節,可能會導致具體中介者類非常複雜,使得系統難以維護。

參考書籍:《大話設計模式》