开发者应该掌握的思想谱系(五)事件驱动架构
一句话核心系统的各个模块不直接调用对方而是通过“事件/信号”来通信。发送者不关心谁接收接收者不关心谁发送。生活例子红绿灯路口想象一个十字路口没有事件驱动直接调用的方式每个司机要自己观察所有方向的车然后决定走还是停司机A要直接跟司机B说“我要走了你停下”所有人互相依赖乱成一团事件驱动红绿灯的方式红绿灯只管发出信号红灯/绿灯所有司机只关注红绿灯不关注其他司机红绿灯不需要知道有多少车、车要去哪Qt 的信号槽就是事件驱动的完美实现// 发送者只负责发出信号不知道谁会接收 class Button : public QWidget { signals: void clicked(); // 发出我被点击了的事件 }; // 接收者只负责响应信号不知道谁发出的 class Logger : public QObject { public slots: void onButtonClick() { qDebug() 按钮被点击了; // 响应事件 } }; // 连接把事件和响应关联起来 Button btn; Logger logger; connect(btn, Button::clicked, logger, Logger::onButtonClick);事件驱动 vs 直接调用方式代码示例耦合度灵活性直接调用logger.onButtonClick()高Button必须知道Logger低事件驱动emit clicked()低Button不知道谁接收高事件驱动的核心好处好处说明松耦合发送者不知道接收者可以独立修改易扩展添加新功能只需要增加接收者不用改发送者可复用同一个事件可以被多个模块响应可测试可以单独测试每个接收者不需要其他模块一句话总结模块之间不直接调用而是通过“事件”通信。发送者只管“喊一声”谁听到、谁响应它都不管。就像红绿灯只管变颜色所有司机自己决定怎么做。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2503124.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!