【C++】中介者模式

发布于:2025-07-02 ⋅ 阅读:(21) ⋅ 点赞:(0)

中介者模式(Mediator Pattern)是一种【行为型】设计模式,它通过一个中介对象来封装一系列对象之间的交互,使各对象不需要显式地相互引用,从而降低耦合度,并可以独立地改变它们之间的交互。这种模式将多对多的交互转化为一对多的交互,使系统更易于维护和扩展。

一、模式核心概念与结构

中介者模式包含四个核心角色:

  1. 抽象中介者(Mediator):定义统一的接口,用于各同事对象之间的通信。
  2. 具体中介者(Concrete Mediator):实现中介者接口,协调各同事对象的交互逻辑。
  3. 抽象同事类(Colleague):定义各同事类的公共接口,每个同事类都知道其中介者对象。
  4. 具体同事类(Concrete Colleague):实现抽象同事类,通过中介者与其他同事通信。

二、C++ 实现示例:聊天室系统

以下是一个简单的聊天室系统示例,演示如何使用中介者模式实现用户之间的通信:

#include <iostream>
#include <string>
#include <memory>
#include <unordered_map>
#include <vector>

// 前向声明
class ChatMediator;

// 抽象同事类:用户
class User {
   
protected:
    std::shared_ptr<ChatMediator> mediator;
    std::string name;

public:
    User(std::shared_ptr<ChatMediator> m, const std::string& n)
        : mediator(m), name(n) {
   }
    
    virtual ~User() = default;
    virtual void send(const std::string& message) = 0;
    virtual void receive(const std::string& message, const std::string& sender) = 0;
    
    std::string getName() const {
    return name; }
};

// 抽象中介者:聊天室
class ChatMediator {
   
public:
    virtual ~ChatMediator() = default;
    virtual void addUser(std::shared_ptr<User> user) = 0;
    virtual void removeUser(std::shared_ptr<User> user) = 0;
    virtual void sendMessage(const std::string& message, const std::string& sender, const std::string& receiver = "") = 0;
};

// 具体同事类:普通用户
class ConcreteUser : public User {
   
public:
    ConcreteUser(std::shared_ptr<ChatMediator> m, const std::string& n)
        : User(m, n) {
   }
    
    void send(const std::string& message) override {
   
        std::cout << name << " sends message: " << message << std::endl;
        mediator->sendMessage(message, name