0

0

C++如何实现中介者模式解耦对象

P粉602998670

P粉602998670

发布时间:2025-09-19 08:24:01

|

324人浏览过

|

来源于php中文网

原创

中介者模式通过引入中介者对象管理交互,降低C++中类间的耦合度。定义Mediator接口规范通信方法,同事类持有中介者指针并通过其转发消息,避免直接引用其他同事。具体中介者维护同事列表,根据业务逻辑转发消息,实现集中控制。示例代码展示同事类通过中介者发送和接收消息的过程,提升系统可维护性和扩展性。

c++如何实现中介者模式解耦对象

中介者模式通过引入一个中间对象来管理多个对象之间的交互,避免它们直接引用彼此。在C++中实现中介者模式,能有效降低类之间的耦合度,提升代码的可维护性和扩展性。

定义中介者接口

中介者通常是一个抽象接口,规定了对象之间通信的方法。这样可以让具体中介者灵活替换,也方便单元测试。

  • 定义一个 Mediator 基类或接口,包含处理消息或事件的虚函数
  • 常见方法如 send(message, sender)notify(sender, event)

创建具体同事类

同事类(Colleague)不再直接与其他同事通信,而是通过中介者转发消息。

  • 每个同事持有一个中介者指针,构造时传入
  • 当状态改变或需要通信时,调用中介者的接口方法
  • 避免在同事类中保存其他同事的引用

实现具体中介者逻辑

具体中介者知道所有注册的同事对象,并根据业务规则协调它们的行为。

立即学习C++免费学习笔记(深入)”;

魔众社区购商城系统
魔众社区购商城系统

现在要说到社区团购模式,相信大家都不陌生,其实社区团购这种模式最初是从长沙开始,目前正向全国各地蔓延开来,这也使得一大批创业者正在如火如荼的想进入到社区团购这个行业中来,经过不断的学习,不断的讨论,慢慢的在心里形成了自己对于社区团购的理解。

下载
  • 维护一组同事对象的引用(可用vector、map等容器)
  • sendnotify 方法中判断发送者和消息类型
  • 决定将消息转发给哪个或哪些接收者

示例代码片段

下面是一个简化实现:

#include 
#include 

class Colleague;

class Mediator { public: virtual void send(const std::string& message, Colleague* sender) = 0; };

class Colleague { protected: Mediator mediator; public: Colleague(Mediator m) : mediator(m) {} virtual void receive(const std::string& message) = 0; virtual void send(const std::string& message) { mediator->send(message, this); } };

class ConcreteColleagueA : public Colleague { public: ConcreteColleagueA(Mediator* m) : Colleague(m) {} void receive(const std::string& message) override { std::cout << "A received: " << message << "\n"; } };

class ConcreteColleagueB : public Colleague { public: ConcreteColleagueB(Mediator* m) : Colleague(m) {} void receive(const std::string& message) override { std::cout << "B received: " << message << "\n"; } };

class ConcreteMediator : public Mediator { private: std::vector> colleagues; public: void add(Colleague c) { colleagues.push_back(c); } void send(const std::string& message, Colleague sender) override { for (auto c : colleagues) { if (c != sender) { c->receive(message); } } } };

使用时只需创建中介者,注册同事对象,然后调用 send 即可完成解耦通信。

基本上就这些。关键是让对象不直接依赖彼此,把交互逻辑集中到中介者中统一处理。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1027

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

66

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

455

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

11

2026.01.19

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

75

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

36

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

59

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

40

2025.11.27

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

5

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 7.2万人学习

C 教程
C 教程

共75课时 | 4.1万人学习

C++教程
C++教程

共115课时 | 13.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号