中介者模式:解耦复杂对象交互的星型结构设计

1. 中介者模式深度解析

中介者模式(Mediator Pattern)是一种行为型设计模式,它通过引入一个中介对象来封装一组对象之间的交互。这种模式特别适用于处理对象间复杂的网状依赖关系,将其转化为星型结构,从而降低系统的耦合度。

1.1 模式核心思想

在软件开发中,我们经常会遇到多个对象相互引用、相互调用的场景。这种网状依赖关系会导致系统变得难以维护和扩展。中介者模式的核心思想就是:

  1. 解耦对象间的直接依赖:所有对象不再直接引用彼此,而是通过中介者进行通信
  2. 集中控制逻辑:将原本分散在各个对象中的交互逻辑集中到中介者中管理
  3. 简化对象职责:每个对象只需关注自身业务逻辑,不需要知道如何与其他对象交互

提示:中介者模式特别适合处理GUI组件交互、聊天系统、任务调度等场景,这些场景通常涉及多个对象间的复杂交互。

1.2 模式结构详解

中介者模式包含四个关键角色:

  1. 抽象中介者(Mediator)

    • 定义对象间通信的接口
    • 通常包含注册同事对象和转发消息的方法
    • 在C++中通常实现为抽象基类
  2. 具体中介者(ConcreteMediator)

    • 实现抽象中介者定义的接口
    • 维护所有同事对象的引用
    • 协调各同事对象之间的交互逻辑
  3. 抽象同事类(Colleague)

    • 定义同事对象的公共接口
    • 持有中介者的引用
    • 在C++中通常实现为抽象基类
  4. 具体同事类(ConcreteColleague)

    • 实现抽象同事类定义的接口
    • 需要与其他同事通信时,通过中介者转发
    • 只与中介者交互,不直接引用其他同事

需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。

2. 中介者模式实现细节

2.1 C++实现要点

在C++中实现中介者模式需要注意以下几个关键点:

  1. 内存管理

    • 使用智能指针(shared_ptr/unique_ptr)管理对象生命周期
    • 避免中介者和同事对象间的循环引用
    • 在示例代码中使用原始指针是为了简化,实际项目建议使用智能指针
  2. 接口设计

    • 抽象中介者接口应足够通用
    • 同事类接口应根据具体业务需求设计
    • 使用纯虚函数确保接口的规范性
  3. 线程安全

    • 如果系统是多线程环境,需要考虑中介者的线程安全性
    • 可以使用互斥锁保护共享数据
    • 消息转发可能需要考虑异步机制

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 {

内容推荐

已经到底了哦
已经到底了哦