本文借鉴《大话设计模式》,算是对自己学习的总结,也希望分享下所学知识~~
中介者模式(Mediator):
用一个中介对象来封装一系列的对象交互。
中介者使各对象不需要显示的互相调用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
举个例子:
1.国与国之间不必互相联系,而通过联合国充当中介者联系。
2.新入职的人不必直接与各部分的人打交道,而通过HR或者主管充当中介者联系。
代码如下:
1.创建 中介者类 和 国家类
abstract class Mediator
{
public abstract void Send(string message, Country country);
}
abstract class Country
{
protected Mediator mediator;
public Country(Mediator mediator)
{
this.mediator = mediator;
}
}
2.创建两个不同的国家类
没有直接交互,通过中介者发消息。
class USA : Country
{
public USA(Mediator mediator) : base(mediator)
{
}
public void Send(string message)
{
mediator.Send(message, this);
}
public void GetMessage(string message)
{
Console.WriteLine("美国获取信息 : " + message);
}
}
class Iraq : Country
{
public Iraq(Mediator mediator) : base(mediator)
{
}
public void Send(string message)
{
mediator.Send(message, this);
}
public void GetMessage(string message)
{
Console.WriteLine("伊拉克获取信息 : " + message);
}
}
3.创建联合国类
中介类了解所有的过来,通过方法判断消息发给具体的国家
class UnitedNation : Mediator
{
public USA USACountry
{
private get; set;
}
public Iraq IRAQCountry
{
private get; set;
}
public override void Send(string message, Country country)
{
if (country is USA)
{
IRAQCountry.GetMessage(message);
}
else if (country is Iraq)
{
USACountry.GetMessage(message);
}
}
}
4.使用起来:
UnitedNation unitedNation = new UnitedNation();
USA usa = new USA(unitedNation);
Iraq iraq = new Iraq(unitedNation);
unitedNation.USACountry = usa;
unitedNation.IRAQCountry = iraq;
usa.Send("123");
iraq.Send("213");
总结一哈:
优点:
1.减少了各个模块的耦合
2.独立改变和复用各个模块
3.把如何协作进行了抽象,在最上层以宏观角度解决问题
缺点:
1.控制集中化,中介者很复杂