中介者(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);
        }
    }
原文地址:https://www.cnblogs.com/dragon-L/p/3792246.html