结合各简单的联合国和国家的例子吧。
1、定义一个联合国的接口:
namespace Mediator
{
abstract class UnitedNation
{
public abstract void Declare(string message, Country collegue);
}
}
2、再定义一个国家类的接口:
namespace Mediator
{
abstract class Country
{
protected UnitedNation mediator;
public Country(UnitedNation mediator)
{
this.mediator = mediator;
}
}
}
3、美国类
namespace Mediator
{
class Usa : Country
{
public Usa(UnitedNation mediator) : base(mediator)
{
}
public void Declare(string message)
{
mediator.Declare(message, this);
}
public void GetMessage(string message)
{
Console.WriteLine("美国获得对方信息:" + message);
}
}
}
4、伊拉克类
namespace Mediator
{
class Irac : Country
{
public Irac(UnitedNation mediator) : base(mediator)
{
}
public void Declare(string message)
{
mediator.Declare(message, this);
}
public void GetMessage(string message)
{
Console.WriteLine("伊拉克获得对方信息:" + message);
}
}
}
5、联合国安理会类(这个就是中介者,通过它实现两个国家间的信息传达)
namespace Mediator
{
class UnitedNationSecurity : UnitedNation
{
private Usa colleague1;
private Irac colleague2;
public Usa Collegue1 { set { colleague1 = value; } }
public Irac Colleague2 { set { colleague2 = value; } }
public override void Declare(string message, Country colleague)
{
if (colleague == colleague1)
{
colleague2.GetMessage(message);
}
else
{
colleague1.GetMessage(message);
}
}
}
}
6、客户端代码的简单调用
namespace Mediator
{
class Program
{
static void Main(string[] args)
{
UnitedNationSecurity unsc = new UnitedNationSecurity();
Usa c1 = new Usa(unsc);
Irac c2 = new Irac(unsc);
unsc.Collegue1 = c1;
unsc.Colleague2 = c2;
c1.Declare("不准研发核武器,否则发动战争!");
c2.Declare("我们没有核武器,也不怕侵略!");
Console.ReadKey();
}
}
}
代码实现的效果:
代码已经是全的可以直接复制使用(最好是自己再敲一遍),没看太明白的话,直接调试运行一遍,保证你懂。
中介者模式的优缺点:
优点:
这点看代码后应该就很清楚了,大大减少了两个国家间的耦合,而是把复杂的逻辑关系判断都放在了中介者(联合国安理会上),相当于中介者的集中控制。
缺点:
其实从优点上就可以得出缺点就是中介者往往会过于复杂,这就是集中控制带来的负面影响。
结语:大家想想,如果世界上的各个国家间的大事能通过联合国这个中介来调节处理,往往能得到一个较好的结果。如果都是国与国间的直接处理,不难想象绝对会牵扯到更多的国家,这就是高耦合带来的很大负面影响。