当前位置: 首页 > news >正文

设计模式:中介者模式(C++实现)

在中介者模式中,中介者对象负责协调多个对象之间的交互,将对象之间的耦合度降低。

#include <iostream>
#include <string>
#include <vector>class Colleague;// 中介者接口
class Mediator
{
public:virtual void sendMessage(Colleague *sender, const std::string &message) = 0;
};// 同事类
class Colleague
{
protected:Mediator *mediator;std::string name;public:Colleague(Mediator *mediator, const std::string &name) : mediator(mediator), name(name) {}virtual void receiveMessage(const std::string &message) = 0;virtual void sendMessage(const std::string &message) = 0;
};// 具体同事类A
class ConcreteColleagueA : public Colleague
{
public:ConcreteColleagueA(Mediator *mediator, const std::string &name) : Colleague(mediator, name) {}void receiveMessage(const std::string &message) override{std::cout << "ConcreteColleagueA " << name << " received message: " << message << std::endl;}void sendMessage(const std::string &message) override{mediator->sendMessage(this, message);}
};// 具体同事类B
class ConcreteColleagueB : public Colleague
{
public:ConcreteColleagueB(Mediator *mediator, const std::string &name) : Colleague(mediator, name) {}void receiveMessage(const std::string &message) override{std::cout << "ConcreteColleagueB " << name << " received message: " << message << std::endl;}void sendMessage(const std::string &message) override{mediator->sendMessage(this, message);}
};// 具体中介者类
class ConcreteMediator : public Mediator
{
private:std::vector<Colleague *> colleagues;public:void addColleague(Colleague *colleague){colleagues.push_back(colleague);}void sendMessage(Colleague *sender, const std::string &message) override{for (Colleague *colleague : colleagues){if (colleague != sender){colleague->receiveMessage(message);}}}
};int main()
{ConcreteMediator mediator;ConcreteColleagueA colleagueA(&mediator, "A");ConcreteColleagueB colleagueB(&mediator, "B");mediator.addColleague(&colleagueA);mediator.addColleague(&colleagueB);colleagueA.sendMessage("Hello from A");colleagueB.sendMessage("Hi from B");return 0;
}

运行结果:

ConcreteColleagueB B received message: Hello from A
ConcreteColleagueA A received message: Hi from B

在上述代码中,Mediator是中介者接口,定义了发送消息的方法。Colleague是同事类,定义了接收消息和发送消息的方法。ConcreteColleagueA和ConcreteColleagueB是具体的同事类,实现了同事接口。ConcreteMediator是具体的中介者类,实现了中介者接口,并维护了同事对象的列表。在main函数中,我们创建了中介者对象和两个具体同事对象,并将同事对象添加到中介者中。然后,同事对象可以通过中介者来发送消息,并且中介者会将消息传递给其他同事对象。输出结果将显示同事对象之间的交互。

http://www.lryc.cn/news/176811.html

相关文章:

  • Python常用函数
  • 进程与线程的记忆方法
  • 支持私有化部署的 WorkPlus,助您构建定制化的即时通讯平台
  • adjustText库解决深度学习、视觉模型matplotlib画散点图时由于标签非常多导致的重叠现象
  • 机器学习线性回归学习总结笔记
  • 火狐连接错误代码SEC_ERROR_UNKNOWN_ISSUER
  • react 网页/app复制分享链接到剪切板,分享到国外各大社交平台,通过WhatsApp方式分享以及SMS短信方式分享链接内容
  • 用智能文字识别技术赋能古彝文数字化之路
  • QT入门10个小demo——MP4视频播放器
  • MySQL常用操作
  • uni-app 之 Toast 消息提示
  • C语言--指针进阶3--数组指针
  • 购物车案例
  • c++ chrono
  • 实现长短地址的相互映射
  • 第1讲:前后端分离思想
  • 【深度学习】【Opencv】Python/C++调用onnx模型【基础】
  • C# MQTT通讯
  • 使用c++实现输出爱心(软件:visual Studio)
  • uploadifive上传工具php版使用
  • Docker容器管理
  • 【文末送书】用Chat GPT轻松玩转机器学习与深度学习
  • Redis的学习
  • java版Spring Cloud+Mybatis+Oauth2+分布式+微服务+实现工程管理系统
  • Vue 3的 h 函数详解
  • 防近视台灯什么牌子好?推荐有效预防近视的台灯
  • 五、C#—字符串
  • 【Vue3 源码解析】nextTick
  • 基于ModebusRTU通信采集温度湿度项目案例
  • 【已解决】关于如何将Doccano标注的文本转换成NER模型可以直接处理的CoNLL 2003格式