中介者模式
用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互.
Define an object that encapsulates how a set of objects interact.Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently.
1.适用场景
中介者模式适用于多个对象之间紧密耦合的情况,紧密耦合的标准是:在类图中出现了蜘蛛网状结构。
使用终结者模式可将蜘蛛网状结构梳理为星型结构。
实际例子:
- 机场调度中心
- MVC
- 媒体网关
- 中介服务
2.优劣
2.1 优点
- 减少类间的依赖
把原有的一对多的依赖变成了一对一的依赖,同事类只依赖中介者,减少了依赖,当然同时也降低了类间的耦合。
2.2 缺点
- 中介者会膨胀得很大
中介者模式的缺点就是中介者会膨胀得很大,而且逻辑复杂,原本N个对象直接的相互依赖关系转换为中介者和同事类的依赖关系,同事类越多,中介者的逻辑就越复杂。
3.登场角色
3.1 Mediator(抽象中介者)
负责定义与 Colleague 角色进行通信和做出决定的接口。
定义统一的接口,用于各同事角色之间的通信。
3.2 Concrete Mediator(具体中介者)
具体中介者 通过协调各同事角色实现协作行为,因此它必须依赖于各个同事角色。
3.3 Colleague(同事)
负责定义与 Mediator 角色进行通信的接口。
每一个同事角色都知道中介者角色,而且与其他的同事角色通信的时候,一定要通过中介者角色协作。
3.4 Concrete Colleague(具体同事)
负责实现 Colleague 接口。