【C++】中介者模式

目录

  • 一、模式核心概念与结构
  • 二、C++ 实现示例:聊天室系统
  • 三、中介者模式的关键特性
  • 四、应用场景
  • 五、中介者模式与其他设计模式的关系
  • 六、C++ 标准库中的中介者模式应用
  • 七、优缺点分析
  • 八、实战案例:机场塔台调度系统
  • 九、实现注意事项
    • 如果这篇文章对你有所帮助,渴望获得你的一个点赞!

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

一、模式核心概念与结构

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

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

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

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

#include 
#include 
#include 
#include 
#include 

// 前向声明
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

你可能感兴趣的:(设计模式,c++,中介者模式,设计模式)