1.中间代理类
namespace IntermediaryPattern
{
/// <summary>
/// 中介者模式:中介者类唯一要干的事情就是给各个成员对象发出通知。
/// 因此,中介者事先就应该知道有哪些成员
///
/// 中介者模式和代理模式,观察者模式非常的像。但是其它两种模式在调用的时候,
/// 并不需要事先设置那个类被代理
/// </summary>
public abstract class Intermediary
{
/// <summary>
/// 要发送的消息和要接受消息的成员
/// </summary>
/// <param name="msg"></param>
/// <param name="member"></param>
public abstract void SendMsg(string msg,Member member);
}
/// <summary>
/// 成员对象需要知道是哪个中介者在通知它事情
/// </summary>
public abstract class Member
{
protected Intermediary intermediary;
public Member(Intermediary intermediaryObj)
{
this.intermediary = intermediaryObj;
}
/// <summary>
/// 各成员间要发送消息
/// </summary>
/// <param name="msg"></param>
public abstract void Send(string msg);
/// <summary>
/// 这个方法其实是具体实施发消息的
/// </summary>
/// <param name="msg"></param>
public abstract void SendOut(string msg);
}
/// <summary>
/// 教务处类
/// </summary>
public class Academic : Intermediary
{
//事先要知道有哪些成员
public Class1 class1;
public Class2 class2;
public override void SendMsg(string msg, Member member)
{
if (member.GetType().Name == "Class1")
class1.SendOut(msg);
if (member.GetType().Name == "Class2")
class2.SendOut(msg);
}
}
/// <summary>
/// 1班
/// </summary>
public class Class1 : Member
{
public Class1(Intermediary intermediaryObj)
: base(intermediaryObj)
{ }
public override void Send(string msg)
{
intermediary.SendMsg(msg,this);
}
public override void SendOut(string msg)
{
Console.WriteLine(msg);
}
}
/// <summary>
/// 1班
/// </summary>
public class Class2 : Member
{
public Class2(Intermediary intermediaryObj)
: base(intermediaryObj)
{ }
public override void Send(string msg)
{
intermediary.SendMsg(msg, this);
}
public override void SendOut(string msg)
{
Console.WriteLine(msg);
}
}
}
2.调用
static void Main(string[] args)
{
//实例化中介者对象
Academic academic = new Academic();
//具体的发消息对象
Class1 member1 = new Class1(academic);
Class2 member2 = new Class2(academic);
//中介者事先需要知道接受消息的对象
academic.class1 = member1;
academic.class2 = member2;
member1.Send("早上好");
member2.Send("晚上好");
Console.ReadKey();
}