十一个行为模式之中介者模式(Mediator Pattern)

时间:2021-12-01 01:47:27

定义:

用一个中介对象(中介者)来封装一系列的对象交互,使各个对象之间不需要显式地相互引用,从而降低耦合度,而且可以独立地改变他们之间的交互关系。

十一个行为模式之中介者模式(Mediator Pattern)

解耦后:

十一个行为模式之中介者模式(Mediator Pattern)

结构图:

十一个行为模式之中介者模式(Mediator Pattern)

  • Mediator:抽象中介者,定义了一个通用的接口,用于对应组件改变状态时和其它组件进行相互通信的接口。
  • ConcreteMediator:具体中介者,它持有了具体组件的引用,实现了抽象中介者定义的接口。主要负责协调各个组件相互调用关系,对不同的组件状态改变采取不同的策略。
  • Colleague:抽象同事类,定义了各个组件的公用方法,维持了一个抽象中介者的引用,子类可以通过该引用进行通信。
  • ConcreteColleague:具体同事类,实现了各自的业务方法和逻辑。当自己需要与其他同事进行通信时,直接通过中介者来通信,不需要关心通信方式和处理方式。

两方面的职责

  • 结构上:中介者提供中转作用,各个同事之间不需要显式地相互引用,而是通过中介者来实现间接调用。
  • 行为上:中介者提供协调作用,封装了不同同事之间的调用关系,可以很方便地扩展这些调用关系从而达到不同的目的,而具体的同事无需感知调用关系的改变。

新添组件

当增加一个新的组件Lable,可以采用两种策略来更改现有系统:

  • 新添加一个组件Lable,并修改中介者代码:增加一个lable的引用,并修改调用关系。
  • 新增加一个组件Lable和一个子中介者SubMediator,子中介者覆盖父类的方法,并在中间加入Lable的相关业务逻辑。原有的组件和Mediator无需做修改,客户端只需更改中介者即可。

优点:

  • 中介者简化了对象之间的交互,是原来复杂的网状引用关系变为容易理解,维护和扩展的星型结构。
  • 中介者将各个同事之间进行解耦,可以独立地使用每一个同事类,或者很方便地添加新的同事类,符合“开闭原则”。

实例:

十一个行为模式之中介者模式(Mediator Pattern)

MediatorPattern.java