C++ c++;观察者模式:添加另一个维度
我试图在一个“智能建筑”系统设计中实现这个模式(使用STL库)。放置在房间、楼层等的各种“传感器”,由“控制器”处理的调度信号(也放置在不同的房间、楼层等)。我面临的问题是,控制器对事件的订阅不仅基于事件,还基于位置 例如,控制器A可以订阅4楼1号房间的火灾信号和5楼的运动信号。基于楼层的订阅意味着控制器A将获得一个关于他订阅的楼层中每个房间的运动事件(假设适当的传感器放置在那里)。对于这一点,还有一个建筑范围的订阅 系统的拓扑结构是在启动时从配置文件中读取的,所以我不想映射整个建筑,只想映射包含传感器和控制器的相关位置 我的想法是: 选项1:monitoradera包含区域名称(Building1,Floor 2,Room 3)和向量的索引为枚举事件类型的向量的类向量的每个成员包含订阅此事件的控制器列表。如果是楼层中的房间或建筑中的楼层,则该类还将包含一个指向父Monitoredera的指针 传感器类将向中心集线器发送事件以及传感器名称。中心将通过其传感器名称运行到位置图,获取匹配的监视器数据并向向量中的所有控制器发出警报 缺点:C++ c++;观察者模式:添加另一个维度,c++,design-patterns,C++,Design Patterns,我试图在一个“智能建筑”系统设计中实现这个模式(使用STL库)。放置在房间、楼层等的各种“传感器”,由“控制器”处理的调度信号(也放置在不同的房间、楼层等)。我面临的问题是,控制器对事件的订阅不仅基于事件,还基于位置 例如,控制器A可以订阅4楼1号房间的火灾信号和5楼的运动信号。基于楼层的订阅意味着控制器A将获得一个关于他订阅的楼层中每个房间的运动事件(假设适当的传感器放置在那里)。对于这一点,还有一个建筑范围的订阅 系统的拓扑结构是在启动时从配置文件中读取的,所以我不想映射整个建筑,只想映射包
- 位置与控制器的耦合
- 事件是枚举的,并且在monitoradea类中硬编码,因此很难添加将来的事件。
- 效率很低。每个事件都会使控制中心遍历所有控制器,并找出订阅此特定事件的控制器
- 地图
- 强大的数据重复
- 无法向基于楼层的订阅通知各个房间中的事件
谢谢您提供的信息。问题:消息总线与简单事件循环有何不同?我不确定是否正确理解了您的问题,但这是在类型化语言上实现方法调度的不同方式。例如,您可以在总线上发送消息,并使用带有ID和一些数据的结构,如果另一个类对该特定ID感兴趣(有许多实现),则可以处理它。对象之间没有直接的函数调用,就像在常规方法调用消息调度中一样。