中介者模式可以协调多个毫无关系的对象,对于中介者来说,所有对象都必须是透明的,中介者保持所有对象的引用,知道所有引用对象的所有方法。毫无关系的对象可以用中介来转发消息。
abstract class Medaitor
{
public abstract void Send(string message, Colleague colleague);
}
class ConcreteMediator : Medaitor
{
private ConcreteColleague1 c1;
private ConcreteColleague2 c2;
public ConcreteColleague1 C1
{
set { c1 = value; }
}
public ConcreteColleague2 C2
{
set { c2 = value; }
}
public override void Send(string message, Colleague colleague)
{
if (colleague == c1)
{
c2.Notify(message);
}
else
{
c1.Notify(message);
}
}
}
abstract class Colleague
{
protected Medaitor medaitor;
public Colleague(Medaitor medaitor)
{
this.medaitor = medaitor;
}
}
class ConcreteColleague1: Colleague
{
public ConcreteColleague1(Medaitor medaitor): base(medaitor) {}
public void Send(string message)
{
medaitor.Send(message, this);
}
public void Notify(string message)
{
Console.WriteLine($"同事1得到消息{message}");
}
}
class ConcreteColleague2: Colleague
{
public ConcreteColleague2(Medaitor medaitor): base(medaitor) { }
public void Send(string message)
{
medaitor.Send(message, this);
}
public void Notify(string message)
{
Console.WriteLine($"同事2得到消息{message}");
}
}