首页 > 代码库 > 中介者(Mediator)模式

中介者(Mediator)模式

中介者(Mediator)模式:用一个中介对象来封装一系列的对象交互,中介者使各个对象不需要显示的相互引用,从而使得耦合松散,而且可以独立的改变他们之间的交互

  了解《迪米特法则》的朋友就知道,迪米特法则说的就是:一个对象应当对其它对象有尽可能少的了解

迪米特法则的核心观念就是类间解耦,弱耦合,只有弱耦合了以后,类的复用性才可以提高。

 

 Mediator: 抽象中介者, 提供一个传递双方的方法 abstract void Send(string message, Colleague colleague),所以需要Colleague 买卖双方的抽象实例。

ConcreteMediator: 具体中介者,它的作用就是买卖双方的桥梁,所以它中介需要有 买卖双方的具体实例。 

  所以就定义ConcreteColleague1 Colleague1,ConcreteColleague2 Colleague2 买卖双方的一个属性,它就是Colleague1 Colleague2 之间的桥梁。

 Colleague: 抽象买卖商人,他们之间的传递 是靠中介者来完成的所以 需要Mediator mediator中介对象构造函数Colleague(Mediator mediator)。

ConcreteColleague1: 具体买家1,自然也知道他委托的中介是谁,ConcreteColleague1(Mediator mediator)。

 

           //实例一个 m 中介者。            ConcreteMediator m = new ConcreteMediator();            //实例 买家 卖商家,他们的中介者都是m            ConcreteColleague1 c1 = new ConcreteColleague1(m);            ConcreteColleague2 c2 = new ConcreteColleague2(m);            m.Colleague1 = c1;            m.Colleague2 = c2;            //买家通过中介 传话给卖家            c1.Send("买家说-房子120W卖不");            //卖家通过中介回复            c2.Send("卖家说-120W你卖我10套?");            Console.ReadLine(); /// <summary>    /// Mediator 抽象中介者    /// </summary>    public abstract class Mediator    {        public abstract void Send(string message, Colleague colleague);    }    /// <summary>    /// Colleague 抽象同事类    /// </summary>    public abstract class Colleague    {        protected Mediator mediator;        /// <summary>        /// 构造函数中 得到中介者        /// </summary>         public Colleague(Mediator mediator)        {            this.mediator = mediator;        }     }    /// <summary>    /// ConcreteMediator  具体中介者    /// </summary>    public class ConcreteMediator : Mediator    {        public ConcreteColleague1 Colleague1        { get; set; }        public ConcreteColleague2 Colleague2        { get; set; }        public override void Send(string message, Colleague colleague)        {            if (colleague == Colleague1)            {                Colleague2.Notify(message);            }            else            {                Colleague1.Notify(message);            }        }    }    /// <summary>    /// 具体买家    /// </summary>    public class ConcreteColleague1 : Colleague    {        public ConcreteColleague1(Mediator mediator)            : base(mediator)        { }        public void Send(string message)        {            mediator.Send(message, this);        }        public void Notify(string message)        {            Console.WriteLine("买家得到信息:" + message);        }    }    /// <summary>    /// 具体卖家    /// </summary>    public class ConcreteColleague2 : Colleague    {        public ConcreteColleague2(Mediator mediator)            : base(mediator)        { }        public void Send(string message)        {            mediator.Send(message, this);        }        public void Notify(string message)        {            Console.WriteLine("卖家得到信息:" + message);        }    }