中介模式
定义:
定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。
UML:
中介者模式包含以下主要角色:
- 抽象中介者(Mediator)角色: 它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。
- 具体中介者(Concrete Mediator)角色: 实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。
- 抽象同事类(Colleague)角色: 定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。
- 具体同事类(Concrete Colleague)角色: 是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。
我的理解:
有A、B、C三个模块,调用关系:A => B => C,A模块调用完成后要调用B模块,B调用完成后要调用C模块,如果这时增加一个B1模块,B完成后调用B1,由B1调用C,这样为了添加B1模块还要修改B模块。这时ABC三个模块之间的耦合性非常高,修改C模块会影响使用它的其他模块。如果使用中介者模式,只用添加一个中介者类,在中介者类中先调用A,再调用B,再调用C,这样A、B、C模块之间就相互独立 (降低了对象之间的耦合性) 。
优点:
- 类之间各司其职,符合迪米特法则。
- 降低了对象之间的耦合性,使得对象易于独立地被复用。
- 将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。
缺点:
- 中介者模式将原本多个对象直接的相互依赖变成了中介者和多个同事类的依赖关系。当同事类越多时,中介者就会越臃肿,变得复杂且难以维护。