实现Colleague1和Colleague2通过Mediator交流(SendMessage)。
// 抽象同事类
public abstract class Colleague
{
protected Mediator m_Mediator = null; // 通过Mediator 对外沟通, 指向中介者
public Colleague(Mediator theMediator)
{
m_Mediator = theMediator;
}
// Mediator 通知请求
public abstract void Request(string Message);
}
// 实现Colleague的类1
public class ConcreateColleague1 : Colleague
{
public ConcreateColleague1(Mediator theMediator) : base(theMediator) { }
// 执行动作
public void Action()
{
// 执行后通知其他Colleague
m_Mediator.SendMessage(this, "Colleague1发出通知");
}
// Mediator 通知请求
public override void Request(string Message)
{
Debug.Log("ConcreateColleague1.Request: " + Message);
}
}
// 实现Colleague的类2
public class ConcreateColleague2 : Colleague
{
public ConcreateColleague2(Mediator theMediator) : base(theMediator) { }
// 执行动作
public void Action()
{
// 执行后通知其他Colleague
m_Mediator.SendMessage(this, "Colleague2发出通知");
}
// Mediator 通知请求
public override void Request(string Message)
{
Debug.Log("ConcreateColleague2.Request: " + Message);
}
}
/// <summary>
/// Mediator抽象类
/// </summary>
public abstract class Mediator
{
/// <summary>
/// 用来从外界传递信息给Colleague
/// </summary>
public abstract void SendMessage(Colleague theColleague, string Message);
}
/// <summary>
/// 实现Mediator接口,集合管理Colleague对象
/// </summary>
public class ConcreateMediator : Mediator
{
ConcreateColleague1 m_Colleague1 = null;
ConcreateColleague2 m_Colleague2 = null;
public void SetColleague1(ConcreateColleague1 theColleague)
{
m_Colleague1 = theColleague;
}
public void SetColleague2(ConcreateColleague2 theColleague)
{
m_Colleague2 = theColleague;
}
// 收到来自Colleague的通知请求
public override void SendMessage(Colleague theColleague, string Message)
{
// 收到信息后的处理逻辑:
// 收到Colleague1通知Colleague2
if (m_Colleague1 == theColleague)
{
m_Colleague2.Request(Message);
}
// 收到Colleague2通知Colleague1
if (m_Colleague2 == theColleague)
{
m_Colleague1.Request(Message);
}
}
}
测试用例:
void UnitTest()
{
ConcreateMediator pMediator = new ConcreateMediator(); // 产生中介者
ConcreateColleague1 pColleague1 = new ConcreateColleague1(pMediator); // 产生Colleague并传给中介者
ConcreateColleague2 pColleague2 = new ConcreateColleague2(pMediator);
pMediator.SetColleague1(pColleague1);
pMediator.SetColleague2(pColleague2);
pColleague1.Action();
pColleague2.Action();
}
运行结果:
ConcreateColleague2.Request: colleague1发来通知
ConcreateColleague1.Request: colleague2发来通知