bigtalk.jpg

第25章 世界需要和平——中介者模式

概念

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

它将对象的交互模型从复杂无序的图形关系变成了集中控制的星型网络关系。减少了各个交互对象的耦合,可以独立各自改变对象和中介者,一个对象改变不需要改变其它对象而只需要改变中介者与该对象交互,中介者处进行集中控制也让视角更为宏观而非陷入到点对点交互的细节中。

实现方式

  • 中介者抽象类(Mediator),包含从参与者到中介者交互的抽象接口(Send)
  • 具体中介者类(ConcreteMediator),知道所有具体参与者者类,根据各个参与者的交互规则,实现抽象的交互接口,从发送者接收消息,并通知给接收者。
  • 参与者抽象类(Colleague),包含一个中介者对象,以及一个抽象的接收通知的接口(Notify)
  • 具体参与者类(ConcreteColleague),实现通知接口,根据规则每个参与者知道自己要做的事情,以及不知道其它对象的情况;但是每个参与者都知道中介者。

有点类似***机制。

实现图如下:

24_mediator.png

使用图如下:

24_mediator_use.png

使用场景

注意:

  • 多对多交互复杂的对象群场景中,要慎重考虑使用这个模式;
  • 将控制结构变为集中结构,使得中介者比其它的参与者都复杂,并且系统依赖中心;
  • 一般用于一组对象,定义良好但是复杂的交互(比如通过事件机制),包含分布在多个类的行为但是却不想定义太多的子类。