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

C++ 设计模式《业务模块的调度室》

👨‍🎓 模式名称:中介者模式(Controller)

👦 故事背景:

小明的校园创业平台业务越来越多了:

  • 外卖服务(FoodModule)
  • 快递代取(ExpressModule)
  • 校园保洁(CleanModule)

这些模块彼此通信非常混乱!
比如快递服务完成后需要通知用户 + 通知清洁员打扫 + 通知外卖暂停投递……
每个模块都引用其他模块,代码越来越难维护,小明快崩溃了 !

❌ 没有中介者模式的实现(模块之间直接通信)

每个模块都持有其他模块引用,耦合严重!
class CleanModule;
class FoodModule;class ExpressModule {
public:void onExpressPicked(CleanModule* clean, FoodModule* food) {std::cout << "快递已代取,通知保洁和外卖暂停!\n";clean->cleanRoom();food->pauseDelivery();}
};class CleanModule {
public:void cleanRoom() {std::cout << "保洁阿姨准备打扫了!\n";}
};class FoodModule {
public:void pauseDelivery() {std::cout << "外卖暂停配送,等清洁完再送。\n";}
};

每加一个模块,就要在所有模块里修改逻辑 ➜ 违背开闭原则!

✅ 使用中介者模式的解决方案

小明创建一个“统一调度中心(Mediator)”,各模块只跟它打交道,由它协调模块之间的互动

抽象中介者
class Mediator {
public:virtual void notify(const std::string& event) = 0;virtual ~Mediator() = default;
};
各模块(组件)
class FoodModule {Mediator* mediator;
public:FoodModule(Mediator* m) : mediator(m) {}void pauseDelivery() {std::cout << "外卖暂停配送。\n";}void resumeDelivery() {std::cout << "外卖恢复配送。\n";}
};class CleanModule {Mediator* mediator;
public:CleanModule(Mediator* m) : mediator(m) {}void cleanRoom() {std::cout << "保洁阿姨开始打扫……🧹\n";mediator->notify("clean_done");}
};class ExpressModule {Mediator* mediator;
public:ExpressModule(Mediator* m) : mediator(m) {}void pickUpPackage() {std::cout << "快递已代取📦,开始通知清洁!\n";mediator->notify("express_picked");}
};
具体中介者实现
class DispatchCenter : public Mediator {FoodModule* food;CleanModule* clean;ExpressModule* express;
public:DispatchCenter() : food(nullptr), clean(nullptr), express(nullptr) {}void setModules(FoodModule* f, CleanModule* c, ExpressModule* e) {food = f; clean = c; express = e;}void notify(const std::string& event) override {if (event == "express_picked") {food->pauseDelivery();clean->cleanRoom();} else if (event == "clean_done") {food->resumeDelivery();}}
};
使用方式
int main() {DispatchCenter mediator;FoodModule food(&mediator);CleanModule clean(&mediator);ExpressModule express(&mediator);mediator.setModules(&food, &clean, &express);express.pickUpPackage();  // 快递取件后自动触发协调
}

✅ 效果 & 优点

优势描述
🧠 解耦各模块不再相互引用,只依赖中介者
📈 易扩展新增模块只需要修改中介者逻辑
🔍 逻辑集中所有模块交互逻辑集中于中介者类
http://www.dtcms.com/a/594051.html

相关文章:

  • 南京电商网站开发网业上有错误怎么解决
  • MongoDB 操作命令
  • python和mongodb交互
  • 网站建设就业前景学校网站建设栏目设置
  • 文心一言5.0 Preview模型能力观察:基于LMArena排名的文本任务实测
  • 2-物理层
  • 数据入仓和数据ETL(七)
  • 怎么做网站评估遵义网站
  • Makefile常见错误与快速修复指南
  • 嵌入式Linux学习——文件目录
  • 中科院网站建设WordPress做头部的插件
  • python做网站有什么弊端台州seo网站排名优化
  • PostgreSQL基操
  • 光纤传输20公里的音频、USB光纤传输一体机深度解析
  • DIC多相机协同方案在复杂结构360°全景形貌与变形场检测中的应用研究
  • 发布建设网站一个优秀的个人网站
  • 做网站是干什么用的广州竞价托管公司
  • 梧州网站建设服务商电子商务网站建设
  • 做婚恋网站挣钱吗工商营业执照官网
  • 【ESP32接入最新国产豆包大模型教程】
  • 股指期货和融资融券:对冲交易的两大工具详解
  • 【javaEE】多线程--认识线程、多线程
  • 网站做淘宝客排名会掉吗重庆新闻频道直播在线观看
  • 专业建站流程佛山百度网站快速排名
  • 万能视频解析接口网站怎么做有没有专门做根雕的网站
  • 做网站定金一般多少个人网站seo
  • 青岛营销型网站设计公司开网站做外贸
  • 中国购物网站大全排名Wordpress右侧返回顶部按钮
  • 花都网站建设公司公众号平台网页版登录入口
  • 基于动态规划的潜能觉醒数学模型