版权声明:本文为博主原创文章,未经博主允许不得转载。 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
宏观把控
优缺同:集中控制