定义:
用一个中介对象(中介者)来封装一系列的对象交互,使各个对象之间不需要显式地相互引用,从而降低耦合度,而且可以独立地改变他们之间的交互关系。
解耦后:
结构图:
- Mediator:抽象中介者,定义了一个通用的接口,用于对应组件改变状态时和其它组件进行相互通信的接口。
- ConcreteMediator:具体中介者,它持有了具体组件的引用,实现了抽象中介者定义的接口。主要负责协调各个组件相互调用关系,对不同的组件状态改变采取不同的策略。
- Colleague:抽象同事类,定义了各个组件的公用方法,维持了一个抽象中介者的引用,子类可以通过该引用进行通信。
- ConcreteColleague:具体同事类,实现了各自的业务方法和逻辑。当自己需要与其他同事进行通信时,直接通过中介者来通信,不需要关心通信方式和处理方式。
两方面的职责
- 结构上:中介者提供中转作用,各个同事之间不需要显式地相互引用,而是通过中介者来实现间接调用。
- 行为上:中介者提供协调作用,封装了不同同事之间的调用关系,可以很方便地扩展这些调用关系从而达到不同的目的,而具体的同事无需感知调用关系的改变。
新添组件
当增加一个新的组件Lable,可以采用两种策略来更改现有系统:
- 新添加一个组件Lable,并修改中介者代码:增加一个lable的引用,并修改调用关系。
- 新增加一个组件Lable和一个子中介者SubMediator,子中介者覆盖父类的方法,并在中间加入Lable的相关业务逻辑。原有的组件和Mediator无需做修改,客户端只需更改中介者即可。
优点:
- 中介者简化了对象之间的交互,是原来复杂的网状引用关系变为容易理解,维护和扩展的星型结构。
- 中介者将各个同事之间进行解耦,可以独立地使用每一个同事类,或者很方便地添加新的同事类,符合“开闭原则”。
实例: