中介者模式(Mediator )
| GOF给中介者模式下的定义是:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它 们之间的交互。简单点来说,将原来两个直接引用或者依赖的对象拆开,在中间加入一个“中介”对象,使得两头的对象分别和“中介”对象引用或者依赖。 | 

using System; using System.Collections.Generic; namespace DoFactory.GangOfFour.Mediator.RealWorld { /// <summary> /// MainApp startup class for Real-World /// Mediator Design Pattern. /// </summary> class MainApp { /// <summary> /// Entry point into console application. /// </summary> static void Main() { // 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 Beatle("John"); Participant Yoko = new NonBeatle("Yoko"); chatroom.Register(George); chatroom.Register(Paul); chatroom.Register(Ringo); chatroom.Register(John); chatroom.Register(Yoko); // Chatting participants 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"); // Wait for user Console.ReadKey(); } } /// <summary> /// The 'Mediator' abstract class /// </summary> abstract class AbstractChatroom { public abstract void Register(Participant participant); public abstract void Send( string from, string to, string message); } /// <summary> /// The 'ConcreteMediator' class /// </summary> class Chatroom : AbstractChatroom { private Dictionary<string,Participant> _participants = new Dictionary<string,Participant>(); public override void Register(Participant participant) { if (!_participants.ContainsValue(participant)) { _participants[participant.Name] = participant; } participant.Chatroom = this; } public override void Send( string from, string to, string message) { Participant participant = _participants[to]; if (participant != null) { participant.Receive(from, message); } } } /// <summary> /// The 'AbstractColleague' class /// </summary> class Participant { private Chatroom _chatroom; private string _name; // Constructor public Participant(string name) { this._name = name; } // Gets participant name public string Name { get { return _name; } } // Gets chatroom public Chatroom Chatroom { set { _chatroom = value; } get { return _chatroom; } } // Sends message to given participant public void Send(string to, string message) { _chatroom.Send(_name, to, message); } // Receives message from given participant public virtual void Receive( string from, string message) { Console.WriteLine("{0} to {1}: '{2}'", from, Name, message); } } /// <summary> /// A 'ConcreteColleague' class /// </summary> 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); } } /// <summary> /// A 'ConcreteColleague' class /// </summary> 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); } } }
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号