一、定義
用一箇中介者物件封裝一系列的物件互動,中介者使各物件不需要顯示地相互作用,從而使耦合鬆散,而且可以獨立地改變它們之間的互動。
總結一下:類之間的行為互相影響,有著剪不斷理還亂的關係。需要中介者來調停。
三大部分:
同事類:類A和類B互相影響。我們將他們稱之為同事類。
抽象中介者:中介者和同事類之間的紐帶。便於多個同時類的通訊(事件)。
中介者:繼承抽象中介者,一個同事類發出訊息,影響其他同事類。
二、例項:匯款場景
2.1 同事類 :A向B匯款 ,收款人和匯款人餘額互相影響.
interface IColleague { void PayIn(decimal money); void PayOut(decimal money); }
public class Remitter : IColleague { public void PayOut(decimal money) { Console.WriteLine("匯款 : {0}元", money); } public void PayIn(decimal money) { } } public class Payee : IColleague { public void PayIn(decimal money) { Console.WriteLine("收款 : {0}元", money); } public void PayOut(decimal money) { } }
2.2 中介者
interface IMediator { void PayFromRemitterToPayee(decimal money); }
public class DealMediator : IMediator { private IColleague remitter; private IColleague payee; public void PayFromRemitterToPayee(decimal money) { remitter.PayOut(money); payee.PayIn(money); } public void CreateColleaguePayIntance() { remitter = new Remitter(); payee = new Payee(); } }
客戶端:
//-----------------------中介者模式---------------- Mediator.DealMediator mediator = new Mediator.DealMediator(); mediator.CreateColleaguePayIntance(); mediator.PayFromRemitterToPayee(1000); Console.ReadKey();
結果:
三、優缺點
優:
1、將原來的網狀關係梳理成星狀結構,通過中心點—中介者來實現互相溝通。
2、解耦同事類。
缺:
1、如果同事類較多,中介者將會迅速膨脹,中介者中的邏輯也將變多,膨脹厲害之後不利於以後的擴充。
2、如果有業務的變化將會修改中介者,很多業務集中在這裡,可能會產生影響。