设计模式实战:中介者模式(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️⃣ 工作流引擎

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

十、中介者模式优缺点

✅ 优点

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

❌ 缺点

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

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

适合:

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

不适合:

  • 简单系统
  • 交互关系少

十二、一句话总结

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

换句话说:

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

相关推荐
槑有老呆1 天前
别再手搓 Prompt 了,那个叫"手动挡循环"
设计模式
用户6919026813392 天前
Vibe Coding 开发项目的基本范式
人工智能·设计模式·代码规范
怕浪猫3 天前
领域特定语言(Domain-Specific Language, DSL)
设计模式·程序员·架构
Larcher5 天前
AI Loop:让AI像人一样自主完成任务的核心机制
javascript·人工智能·设计模式
咖啡八杯6 天前
GoF设计模式——享元模式
java·spring·设计模式·享元模式
Data-Miner6 天前
大语言模型+智能体AI,122页PPT详解落地应用培训!
人工智能·microsoft·语言模型
:mnong6 天前
学习创建结构行为设计模式
设计模式
w_t_y_y6 天前
Agent设计模式(四)多模态融合模式(Multi-Modal Fusion)
设计模式
c++之路6 天前
备忘录模式(Memento Pattern)
c++·microsoft