1. 中介者模式深度解析
中介者模式(Mediator Pattern)是一种行为型设计模式,它通过引入一个中介对象来封装一组对象之间的交互。这种模式特别适用于处理对象间复杂的网状依赖关系,将其转化为星型结构,从而降低系统的耦合度。
1.1 模式核心思想
在软件开发中,我们经常会遇到多个对象相互引用、相互调用的场景。这种网状依赖关系会导致系统变得难以维护和扩展。中介者模式的核心思想就是:
- 解耦对象间的直接依赖:所有对象不再直接引用彼此,而是通过中介者进行通信
- 集中控制逻辑:将原本分散在各个对象中的交互逻辑集中到中介者中管理
- 简化对象职责:每个对象只需关注自身业务逻辑,不需要知道如何与其他对象交互
提示:中介者模式特别适合处理GUI组件交互、聊天系统、任务调度等场景,这些场景通常涉及多个对象间的复杂交互。
1.2 模式结构详解
中介者模式包含四个关键角色:
-
抽象中介者(Mediator):
- 定义对象间通信的接口
- 通常包含注册同事对象和转发消息的方法
- 在C++中通常实现为抽象基类
-
具体中介者(ConcreteMediator):
- 实现抽象中介者定义的接口
- 维护所有同事对象的引用
- 协调各同事对象之间的交互逻辑
-
抽象同事类(Colleague):
- 定义同事对象的公共接口
- 持有中介者的引用
- 在C++中通常实现为抽象基类
-
具体同事类(ConcreteColleague):
- 实现抽象同事类定义的接口
- 需要与其他同事通信时,通过中介者转发
- 只与中介者交互,不直接引用其他同事
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 中介者模式实现细节
2.1 C++实现要点
在C++中实现中介者模式需要注意以下几个关键点:
-
内存管理:
- 使用智能指针(shared_ptr/unique_ptr)管理对象生命周期
- 避免中介者和同事对象间的循环引用
- 在示例代码中使用原始指针是为了简化,实际项目建议使用智能指针
-
接口设计:
- 抽象中介者接口应足够通用
- 同事类接口应根据具体业务需求设计
- 使用纯虚函数确保接口的规范性
-
线程安全:
- 如果系统是多线程环境,需要考虑中介者的线程安全性
- 可以使用互斥锁保护共享数据
- 消息转发可能需要考虑异步机制
2.2 聊天室案例实现分析
让我们深入分析聊天室案例的实现细节:
cpp复制// 中介者抽象类
class Mediator {
public:
virtual ~Mediator() = default;
virtual void send(const string& message, User* sender) = 0;
virtual void addUser(User* nUser) = 0;
};
这个抽象中介者定义了两个关键操作:
send():用于转发消息addUser():用于注册新的用户
cpp复制// 具体中介者实现
class ConcreteMediator : public Mediator {
public:
void send(const string& message, User* sender) override {
