问题描述
刚进公司的新人需要其他部门同事帮助是有困难的,但是通过主管协调就会简单很多。
用一个中介对象来封装一系列的对象交互,各对象之间不需要相互引用,从而可以使得耦合松散,并且可以独立的改变他们的交互。
代码实现
中介者抽象类
public abstract class Mediator
{
public abstract void send(string msg, Colleague colleague);
}
同事抽象类
public abstract class Colleague
{
protected Mediator mMediator;
public Colleague(Mediator mediator)
{
mMediator = mediator;
}
}
同事具体实现类
public class ConcreateColleague1:Colleague
{
public ConcreateColleague1(Mediator mediator) : base(mediator) { }
public void Send(string msg)
{
mMediator.send(msg, this);
}
public void Notify(string msg)
{
Console.WriteLine($"同事1得到消息:{msg}");
}
}
public class ConcreateColleague2 : Colleague
{
public ConcreateColleague2(Mediator mediator) : base(mediator) { }
public void Send(string msg)
{
mMediator.send(msg, this);
}
public void Notify(string msg)
{
Console.WriteLine($"同事2得到消息:{msg}");
}
}
中介者具体实现类
public class ConcreateMediator:Mediator
{
protected ConcreateColleague1 mColleague1;
protected ConcreateColleague2 mColleague2;
public ConcreateMediator():base() { }
public void SetColleague1(ConcreateColleague1 colleague1)
{
mColleague1 = colleague1;
}
public void SetColleague2(ConcreateColleague2 colleague2)
{
mColleague2 = colleague2;
}
public override void send(string msg,Colleague colleague)
{
if (colleague == mColleague1)
mColleague2.Notify(msg);
else
mColleague1.Notify(msg);
}
}
Main方法
internal class Program
{
static void Main(string[] args)
{
ConcreateMediator mediator = new ConcreateMediator();
ConcreateColleague1 colleague1 = new ConcreateColleague1(mediator);
ConcreateColleague2 colleague2 = new ConcreateColleague2(mediator);
mediator.SetColleague1(colleague1);
mediator.SetColleague2(colleague2);
colleague1.Send("别卷了,下班吧");
colleague2.Send("等我一分钟,一起走");
}
}
运行结果
同事2得到消息:别卷了,下班吧
同事1得到消息:等我一分钟,一起走