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

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

十、中介者模式优缺点

✅ 优点

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

❌ 缺点

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

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

适合:

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

不适合:

  • 简单系统
  • 交互关系少

十二、一句话总结

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

换句话说:

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

相关推荐
酿情师11 小时前
Microsoft Visual C++ Build Tools 2026 下载与安装指南(Windows)
c++·windows·microsoft
宝桥南山19 小时前
Microsoft Agent Framework(MAF) - 如何将workflow或者A2A client转换成一个AI Agent
microsoft·ai·微软·aigc·.net·.netcore
ylscode19 小时前
微软发布针对 Windows 11 的 KB5089573 补丁,以修复“周二补丁日”安装问题
windows·安全·microsoft·安全威胁分析
春日见1 天前
五分钟入门 强化学习---DQN(Deep Q Net)算法与实现
人工智能·python·深度学习·算法·microsoft·机器学习
冬奇Lab1 天前
微软双论文深度剖析:Agent Skill 的评测体系与自进化优化
人工智能·microsoft·agent
workflower1 天前
具身智能研究对象:物理交互中的智能行为
设计模式·动态规划·软件工程·软件构建·scrum
J2虾虾2 天前
Spring AI Alibaba - Models 模型
人工智能·spring·microsoft
折哥的程序人生 · 物流技术专研2 天前
Java 23 种设计模式:从踩坑到精通 | 抽象工厂 —— 支付/收款如何成套创建?跨平台 UI 如何一键换肤?
java·开发语言·后端·设计模式
Crazy learner2 天前
Windows 微软商店更新失败(错误代码 0x80004002)完整解决指南(2026最新有效)
windows·microsoft
凯丨2 天前
会“做梦“的 AI:用一句话生成可以玩的世界——读懂世界模型 Genie 3
人工智能·microsoft