设计模式实战:中介者模式(Mediator)

在复杂系统中,你是否遇到过这样的情况:

  • 多个对象之间相互调用
  • 类之间互相依赖
  • 一个改动影响多个模块

典型表现就是:

对象之间"网状依赖",越改越乱。

例如一个聊天室系统:

python 复制代码
user1.send("hello")
user2.receive("hello")
user3.receive("hello")

如果用户之间互相调用:

python 复制代码
user1.send("hello", user2, user3)

问题:

  • 每个对象都要知道其他对象
  • 耦合非常严重
  • 难扩展

这正是 中介者模式(Mediator) 要解决的问题。


一、中介者模式解决什么问题?

一句话:

用一个中介对象封装一组对象之间的交互,从而降低对象之间的耦合。

关键词:

  • 解耦对象关系
  • 集中控制
  • 简化交互

二、核心思想

不要让对象之间直接通信。

而是:

所有通信都通过"中介者"完成。

结构:

复制代码
Colleague1   Colleague2   Colleague3
     \           |           /
             Mediator

三、一个典型问题:聊天室

我们用聊天室来举例。


四、Python 实现中介者模式

1️⃣ 中介者

python 复制代码
class ChatMediator:

    def __init__(self):
        self.users = []

    def register(self, user):
        self.users.append(user)

    def send(self, message, sender):
        for user in self.users:
            if user != sender:
                user.receive(message)

2️⃣ 同事类(参与者)

python 复制代码
class User:

    def __init__(self, name, mediator: ChatMediator):
        self.name = name
        self.mediator = mediator
        self.mediator.register(self)

    def send(self, message):
        print(f"{self.name} 发送: {message}")
        self.mediator.send(message, self)

    def receive(self, message):
        print(f"{self.name} 收到: {message}")

3️⃣ 使用方式

python 复制代码
mediator = ChatMediator()

u1 = User("Alice", mediator)
u2 = User("Bob", mediator)
u3 = User("Charlie", mediator)

u1.send("Hello everyone")

输出:

复制代码
Alice 发送: Hello everyone
Bob 收到: Hello everyone
Charlie 收到: Hello everyone

五、没有中介者会怎样?

如果不用中介者:

python 复制代码
class User:

    def send(self, message, users):
        for u in users:
            u.receive(message)

问题:

  • 每个对象要持有其他对象
  • 依赖关系爆炸
  • 新增用户需要修改所有逻辑

六、中介者模式的核心价值

中介者模式本质是:

把"多对多关系"变成"一对多关系"。

原来:

复制代码
A ↔ B ↔ C ↔ D(网状)

现在:

复制代码
A → Mediator ← B ← C ← D

七、中介者 vs 观察者模式

很多人会混淆。

对比点 中介者模式 观察者模式
关系 多对多协调 一对多通知
控制中心 中介者 Subject
是否集中逻辑 是 否

一句话:

中介者是"统一调度",

观察者是"广播通知"。


八、中介者 vs 外观模式

对比点 中介者 外观
目的 协调对象交互 简化接口
是否管理交互 是 否

一句话:

外观是"对外简化",

中介者是"对内协调"。


九、真实项目中的应用

非常常见:

1️⃣ 聊天系统

  • 用户之间通过服务器通信

2️⃣ GUI 系统

按钮、输入框、列表:

  • 不直接互相调用
  • 通过控制器协调

3️⃣ 微服务调度

  • API Gateway / Orchestrator
  • 统一调度多个服务

4️⃣ 工作流引擎

  • 节点之间通过调度中心协作

十、中介者模式优缺点

✅ 优点

  • 降低耦合
  • 集中管理逻辑
  • 易扩展

❌ 缺点

  • 中介者可能变"上帝类"
  • 逻辑过多集中

十一、什么时候使用中介者模式?

适合:

  • 多对象复杂交互
  • 对象之间依赖混乱
  • 需要集中控制

不适合:

  • 简单系统
  • 交互关系少

十二、一句话总结

中介者模式的本质是:
让对象不再直接通信,而是通过一个中心协调。

换句话说:

不要让对象"互相找",让它们"找中间人"。

相关推荐
沫璃染墨9 小时前
《Linux工程实践篇(一):认识设计模式——从日志系统看策略模式》
linux·c++·安全·设计模式·策略模式
十六宿舍11 小时前
【软件设计模式-第一课:基础知识了解】
设计模式·架构·面向对象·软件架构
geovindu14 小时前
rust: Facade Pattern
开发语言·后端·设计模式·rust·外观模式
Sand(ContextGate)14 小时前
Python Agent 测试实战:测试与评估,让 Agent 像传统软件一样可交付
前端·javascript·python·microsoft·ai
女神下凡15 小时前
Win10/WIN11自动更新怎么永久关闭?有效的Win10/WIN11强制更新关闭方法.
microsoft
怕浪猫16 小时前
面试官让我手写一个 Tool Use,我用了 3 种方案
设计模式·面试·程序员
geovindu1 天前
rust: Abstract Factory pattern
开发语言·后端·设计模式·rust·抽象工厂模式
Omics Pro2 天前
微软:多模态生物世界模型
数据库·人工智能·算法·microsoft·机器学习·自然语言处理
Carl_奕然2 天前
【智能体】Loop 的四种设计模式之:Event-Driven Loop(2026 最新版)
人工智能·驱动开发·python·设计模式
Carl_奕然2 天前
【智能体】Loop 的四种设计模式之:Hill Climbing Loop(2026 最新版)
人工智能·python·设计模式