【设计模式】——中介者模式(Mediator)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lrtcsdn/article/details/84101395

行为型模式——中介者模式(Mediator)定义
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使耦合松散,而且可以独立地改变它们之间的交互。

**白话解释:**说到这里想到一个例子,古代的姑娘们大多都是“大门不出二门不迈”的姑娘,自然也不会认识什么小伙子,就算是知道了,该怎么去认识呢?在中国的古代有一句话叫做“媒妁之言”,这时候媒人就出现了,给双方互相通信。这是生活中的一个小栗子,媒人就相当于今天学习的模式中的中介者。

中介者的结构图
在这里插入图片描述
Colleague:抽象类;ConcreteColleague:具体类;Mediator抽象中介者;ConcreteMediator:具体中介者对象;

部分代码理解

抽象中介者类

abstract class Mediator
    {
        //定义一个抽象的发送消息方法,得到同事对象和发送信息
        public abstract void Send(string message, Colleague colleague);
    }

抽象同事类

    abstract  class Colleague
    {
        protected Mediator mediator;

        public Colleague(Mediator mediator)
        {
            //构造方法,得到中介者对象
            this.mediator = mediator;
        }
    }

具体中介者类

class concreteMediator:Mediator 
    {
        private ConcreteColleague1 colleague1;
        private ConcreteColleague2 colleague2;
	
		//需要了解所有的同事对象
        public ConcreteColleague1 Colleague1
        {
            set { colleague1 = value; }
        }

        public ConcreteColleague2 Colleague2
        {
            set { colleague2 = value; }
        }

        public override void Send(string message, Colleague colleague)
        { 
            // 重写发送信息的方法,根据对象做出选择判断,通知对象
            if (colleague == colleague1)
            {
                colleague2.Notify (message );
            }
            else 
            {
                colleague1.Notify (message );
            }
        }
    }

客户端

static void Main(string[] args)
        {
            concreteMediator m = new concreteMediator();
				//让两个具体同事类认识中介者对象
           ConcreteColleague1 c1 = new ConcreteColleague1(m);
            ConcreteColleague2 c2 = new ConcreteColleague2(m);
        
			//让中介者认识各个具体同事类对象
            m.Colleague1 = c1;
            m.Colleague2 = c2;
			
			//具体同事类对象的发送信息通过中介者转发
            c1.Send("吃过饭了吗?");
            c2.Send("没有呢,你打算请客吗?");

            Console.Read();
        }

中介者什么时候用?
一般应用于一组对象以定义良好但是复杂的方式进行通信的场合,以及想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合。

中介者的优缺点
优:Mediator的出现减少了各个Colleague的耦合,使得可以独立的改变和复用各个Colleague类和Mediator
宏观把控
优缺同:集中控制

猜你喜欢

转载自blog.csdn.net/lrtcsdn/article/details/84101395