一、前言
中介模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。
二、抽象中介类
1 //联合国机构2 public abstract class UnitedNations3 {4 public abstract void Declare(string message, Country colleague);5 }
三、中介具体类
1 //联合国安理会 2 public class UnitedNationsSecurtiy : UnitedNations 3 { 4 private USA colleague1; 5 private Iraq colleaque2; 6 //美国 7 public USA Colleaque1 8 { 9 set { colleague1 = value; }10 }11 //伊拉克12 public Iraq Colleaque213 {14 set { colleaque2 = value; }15 }16 //声明17 public override void Declare(string message, Country colleague)18 {19 if (colleague == colleague1)20 {21 colleaque2.GetMessage(message);22 }23 else24 {25 colleague1.GetMessage(message);26 }27 }28 }
四、抽象国家类
1 //国家类2 public abstract class Country3 {4 protected UnitedNations mediator;5 public Country(UnitedNations mediator)6 {7 this.mediator = mediator;8 }9 }
五、具体的国家类
1 public class USA : Country 2 { 3 public USA(UnitedNations mediator) : base(mediator) 4 { 5 } 6 //声明 7 public void Declare(string message) 8 { 9 mediator.Declare(message,this);10 }11 //获得消息12 public void GetMessage(string message)13 {14 Console.WriteLine("USA获得对方信息:" + message);15 }16 }17 public class Iraq : Country18 {19 public Iraq(UnitedNations mediator) : base(mediator)20 {21 }22 //声明23 public void Declare(string message)24 {25 mediator.Declare(message, this);26 }27 //获得消息28 public void GetMessage(string message)29 {30 Console.WriteLine("Iraq获得对方信息:" + message);31 }32 }
六、总结
1、Mediator的出现减少了各个Colleague(国家)的耦合,使得可以独立地改变和复用各个Colleague类和Mediator。
2、由于把对象如何写作坐了抽象,将中介作为一个独立的概念并将其封装在一个对象中,这样关注的对象就从对象各自本省的行为转移到他们之间的交互上来,也就站在更宏观的角度去看待系统。
3、由于ConcreteMediator控制了集中化,于是就把交互复杂性变为了中介者的复杂性,这就使得中介者会变得比任何一个ConcreteColleague都复杂。
参考数据:大话设计模式