意图:一组对象定义良好,但是以复杂的方式进行通讯;一个对象引用很多其他对象,依赖关系复杂;
减少了子类的生成;使得对象的通信集中化;把各个Colleague解耦;
参与者:
1)Mediator:中介;
定义一个接口用于个同事Colleague之间的通信;
public abstract class Mediator
{
public abstract void Send(string message, Colleague colleague);
}
2)ConcreteMediator:
定义各个同事之间的通信方式;维护各个同事
public class ConcreteMediator : Mediator
{
public Colleague colleague1;
public Colleague colleague2;
public override void Send(string message, Colleague colleague)
{
if (colleague is colleague1)
{
colleague2.Notify(message);
}
else
{
colleague2.Notify(message);
}
}
}
3)同事Colleague;
每个同事类都知道他的中介对象;当与其他同事通信时,必须通过中介来进行;
public class Colleague
{
private Mediator _mediator;
public Colleague(Mediator mediator) {_mediator = mediator;}
}
public class ConcreteColleague : Colleague
{
public class ConcreteColleague(Mediator mediator): base(mediator) {}
public void Send(string message)
{
_ mediator.Send(message, this);
}
public void Notify(string message)
{
Console.WriteLine("Colleague get the message from" + message);
}
}
4)调用
ConcreteMediator cm = new ConcreteMediator();
ConcreteColleague colleague1 = new ConcreteColleague(cm):
ConcreteColleague colleague2 = new ConcreteColleague(cm):
cm.collgue1 = colleuge1;
cm.colleague2 = colleague2;
colleague1.Send("how are you?");
colleague2.Send("fiine,thanks");