中介者模式/Mediator
意图/适用场景:
中介模式的用意是用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
面向对象设计鼓励将行为分布到各个对象中。这种分布可能会导致对象间有许多连接。在最坏的情况下,每一个对象都知道其他所有对象。虽然将一个系统分割成许多对象通常可以增强可复用性, 但是对象间相互连接的激增又会降低其可复用性。大量的相互连接使得一个对象似乎不太可能在没有其他对象的支持下工作—系统表现为一个不可分割的整体。而且,对系统的行为进行任何较大的改动都十分困难,因为行为被分布在许多对象中。结果是, 你可能不得不定义很多子类以定制系统的行为。
使用中介模式的目的,就是把这种网形的对象间关系转变为星形。使各对象可以相对独立地变化。
UML:
参与者:
- 抽象中介者(Mediator):中介对象的公共接口。定义出一个方法onChange(),用于把一个同事对象发生变化的信息扩散给其它相关的对象。
- 具体中介者(ConcreteMediator):实现抽象中介者接口。
- 抽象同事(Colleague):处于平级关系的、互相间有复杂关联的对象的公共接口。定义出一个方法action(),用于响应相关联的对象的变化。
- 具体同事(ConcreteColleague):实现抽象同事接口。
要点:
- 中介者模式的优点:
- 将多对多的相互作用转化为一对多的相互作用,避免了同事对象之间的过度耦合,使得各同事类可以相对独立地演化。
- 中介者模式的缺点:
- 中介者模式降低了同事对象间的复杂性,但代价是增加了中介者类的复杂性。一个弥补的办法是建立多个中介类,动态地选择其中的一个起作用。
示例代码:
没有为本模式准备示例代码,因为星形的对象间关系实现的方式很多。而且本模式的用意不难理解。