using System; using System.Linq; using System.Text; namespace DesignPatterns.Mediator { //MediatorR abstract class AbstractChatroom { public abstract void Register(Participant participant); public abstract void Send(string from, string to, string message); } //ConcreteMediator class Chatroom : AbstractChatroom { private System.Collections.Hashtable participants = new System.Collections.Hashtable(); public override void Register(Participant participant) { if (participants[participant.Name] == null) { participants[participant.Name] = participant; } participant.Chatroom = this; } public override void Send(string from, string to, string message) { Participant pto = (Participant)participants[to]; if (pto != null) { pto.Receive(from, message); } } } /**********************************************************************************/ //AbstractColleague class Participant { private Chatroom chatroom; private string name; //Constructor public Participant(string name) { this.name = name; } //Properties public string Name { get { return name; } } public Chatroom Chatroom { set { chatroom = value; } get { return chatroom; } } public void Send(string to, string message) { chatroom.Send(name, to, message); } public virtual void Receive(string from, string message) { Console.WriteLine("{0} to {1}:'{2}'", from, name, message); } } //ConcreteColleaguel class Beatle : Participant { //Constructor public Beatle(string name) : base(name) { } public override void Receive(string from, string message) { Console.Write("To a Beatle: "); base.Receive(from, message); } } //ConcreteColleague2 class NonBeatle : Participant { //Constructor public NonBeatle(string name) : base(name) { } public override void Receive(string from, string message) { Console.Write("To a non-Beatle:"); base.Receive(from, message); } } class Program { //客户端调用如下: static void Main(string[] args) { //create chatroom Chatroom chatroom = new Chatroom(); //Create participants and register them Participant George = new Beatle("George"); Participant Paul = new Beatle("Paul"); Participant Ringo = new Beatle("Ringo"); Participant John = new NonBeatle("John"); Participant Yoko = new NonBeatle("Yoko"); chatroom.Register(George); chatroom.Register(Paul); chatroom.Register(Ringo); chatroom.Register(John); chatroom.Register(Yoko); //chatting participants George.Send("Yoko", "你说错话了"); Yoko.Send("George", "哪里说错了?"); //Yoko.Send("John", "Hi John"); //Paul.Send("Ringo", "All you need is love"); //Ringo.Send("George", "My sweet Lord"); //Paul.Send("John", "Can't buy me love"); //John.Send("Yoko", "My sweet love"); Console.ReadKey(); } } }