跳到主要内容

中介者模式

中介者模式通过引入一个中介对象来封装同级组件之间的交互,从而减少对象之间的直接依赖关系,降低耦合度,提高系统的可维护性。

结构

中介者模式示意图中介者模式示意图

中介者模式中,中介者对象负责协调下级组件在同级间的交互。中介者对象通常会维护一个组件列表,用于存储所有需要协调的组件。

组件需要与其他组件通信时,它会向中介者对象发送请求,中介者对象会根据请求的内容选择合适的组件进行响应。中介者对象可以根据需要将请求转发给其他组件,也可以将请求广播给所有组件。

消息的发送者不知道最终会由谁来处理自己的请求,接收者也不知道最初是谁发出了请求。

应用场景

  • 希望消除同级对象间的直接引用,降低耦合度时
  • 希望解耦业务逻辑,编写更易复用的组件代码时

优缺点

优点

  • 单一职责原则:将多个组件间的交流抽取到同一位置,使其更易于理解和维护。
  • 开闭原则:可以为组件更换中介者对象,而不需要修改组件代码。

缺点

  • 中介者可能与过多组件通信,导致其内部负责过多功能,内聚性降低,成为“上帝对象”。

代码示例

下面以一个智能家居系统为例,展示了中介者模式的实现。

在这个系统中,Light(灯)、Thermostat(恒温器)和 CoffeeMachine(咖啡机)是组件。它们之间不直接通信,而是通过一个中介者 SmartHomeMediator 来协调。

每个组件都持有一个对中介者的引用。当一个组件的状态发生变化时(例如,灯被打开),它会通过调用 notify 方法来通知中-介者。中介者接收到通知后,会根据预设的逻辑来协调其他组件(例如,当中介者收到 light_on 事件时,它会指示恒温器调节温度,并触发咖啡机开始煮咖啡)。

这种设计避免了组件之间复杂的网状依赖关系,使得添加新组件或修改组件间的交互逻辑变得更加容易,因为所有的协调逻辑都集中在中介者中。