一句话理解:中介者把多个对象之间的交互集中到一个协调者中,让参与者不再彼此直接引用。
它解决什么问题
大厅中的玩家列表、准备按钮、倒计时和开始按钮会互相影响。若组件两两直接通信,依赖会形成难以维护的网。中介者让组件只报告事件,由协调者决定后续动作。
C# 示例:大厅协调
玩家列表只通知
PlayerReadyChanged,无需知道倒计时和场景系统。组件间的协作规则集中在 LobbyMediator。适用场景
- 复杂面板内的控件联动
- 大厅、战斗回合和任务流程协调
- 多个系统需要协作但不应互相引用
- 编辑器窗口与工具面板
与外观、事件总线的区别
外观主要为客户端提供简化入口;中介者处理一组同级对象之间的双向协作。事件总线负责消息传递,通常不包含业务决策;中介者会明确决定收到事件后该让谁做什么。
风险
网状依赖可能只是被搬进一个巨大中介者。应按业务用例拆分中介者,并把具体计算留在领域服务中。参与者与中介者之间的事件契约也要保持精简。
小结
中介者适合“对象太了解彼此”的场景。它把协作规则集中起来,但仍需控制职责边界,避免协调者成为新的全能类。