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

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

十、中介者模式优缺点

✅ 优点

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

❌ 缺点

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

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

适合:

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

不适合:

  • 简单系统
  • 交互关系少

十二、一句话总结

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

换句话说:

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

相关推荐
ITHAOGE153 小时前
2026年Win7最终版ISO系统映像下载!(集成补丁、旗舰版、完整无精简、64位/32位可选、Windows 7、简体中文/繁体中文/英语可选)
windows·科技·microsoft·微软·电脑
多加点辣也没关系4 小时前
设计模式-建造者模式
设计模式·建造者模式
万邦科技Lafite4 小时前
API接口一键获取商品评论,根据商品评论分析客户画像
linux·服务器·数据库·windows·microsoft·电商开放平台
多加点辣也没关系5 小时前
设计模式-桥接模式
设计模式·桥接模式
编码者卢布6 小时前
【Azure 应用服务】WEBSITE_DISABLE_CROSS_STAMP_SCALE 配置的作用说明
microsoft·azure
学术小白人6 小时前
往届EI检索稳定!第二届可信大数据与人工智能学术会议(ICTBAI 2026)
大数据·人工智能·物联网·microsoft·数字能源
雪度娃娃6 小时前
结构型设计模式——装饰模式
设计模式·装饰器模式
sensen_kiss7 小时前
CPT304 SoftwareEngineeringII 软件工程 2 Pt.4 设计模式(下)
设计模式·软件工程
多加点辣也没关系8 小时前
设计模式-适配器模式
设计模式
Forget the Dream9 小时前
基于适配器模式的 Axios 封装实践
设计模式·typescript·axios·适配器模式