- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试在“智能建筑”系统设计(使用 STL 库)中实现此模式。放置在房间、楼层等处的各种“传感器”发送信号,这些信号由“ Controller ”(也放置在不同的房间、楼层等处)处理。我面临的问题是 Controller 对事件的订阅不仅是基于事件的,它也是基于位置的。
例如, Controller A 可以订阅来自 #4 楼 #1 房间的火警信号和 #5 楼的运动信号。基于楼层的订阅意味着 Controller A 将获得关于他订阅的楼层中每个房间的运动事件(假设适当的传感器放置在那里)。也有针对该问题的全楼订阅。
系统的拓扑结构是在启动时从配置文件中读取的,所以我不想映射整个建筑物,只映射包含传感器和 Controller 的相关位置。
我想到的:
选项 1:MonitoredArea 类,包含区域名称(Building1、Floor 2、Room 3)和一个 vector ,其中 vector 的索引是枚举事件类型, vector 的每个成员包含一个订阅此事件的 Controller 列表。该类还将包含指向父 MonitoredArea 的指针,如果它是楼层中的房间或建筑物中的楼层。
传感器类会将事件连同传感器名称一起发送到中心集线器。集线器将通过他的传感器名称到位置映射运行它,获取匹配的 MonitoredArea 并将警告 vector 中的所有 Controller 。
缺点:
选项 2:将所有订阅保留在 Controller 类中。
缺点:
选项 3:基于事件的功能。事件类(即 FireEvent)将包含它可能发生的所有位置(根据传感器的设置)以及每个位置的订阅它的 Controller 列表。
缺点:
如您所见,我对上述任何解决方案都不满意。我确信我已经到了过度思考的阶段,并且很乐意就我如何处理这个问题提供反馈或替代建议。谢谢。
最佳答案
在游戏开发中有一种设计模式(可以这么说)被大量使用,称为“消息总线”。它有时用于替代基于事件的操作。
“消息总线是一个或多个发送者和/或接收者之间的连接。可以把它想象成总线拓扑中计算机之间的连接:每个节点都可以通过将消息传递到总线来发送消息,所有连接的节点将收到该消息。是否处理节点以及是否发送回复完全取决于每个接收者自己。
将模块连接到消息总线给我们带来了一些优势:
每个模块都是独立的,不需要知道任何其他模块。每个模块都可以对发送到总线的任何消息使用react;这意味着您可以免费获得额外的灵 active ,而根本不会增加依赖性。遵循 YAGNI 工作流程要容易得多:例如,您要添加武器。首先实现物理,然后在渲染器中添加视觉效果,然后播放声音。所有这些功能都可以随时独立实现,而不会相互干扰。您无需过多思考如何将某些模块相互连接。有时需要花费大量时间,包括绘制图表/依赖关系图。”
资料来源: http://gameprogrammingpatterns.com/event-queue.html
http://www.optank.org/2013/04/02/game-development-design-3-message-bus/
关于C++ 观察者模式 : adding another dimension,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36101776/
我的代码如下所示: unemp n)) stop("wrong embedding dimension") : argument is of length zero Called from: emb
Macports 更新后,我认为更新了 numpy,我收到警告: VisibleDeprecationWarning: boolean index did not match indexed arra
我试图使用 MNIST 数据集实现简单的神经网络,但我不断收到此错误 将 matplotlib.pyplot 导入为 plt import torch from torchvision import
我编写了自己的相机 Activity ,我在FrameLayout中显示照片的实时预览,但是实时图片看起来不自然,有点高,我认为这是因为尺寸FrameLayout 的尺寸与相机的尺寸不匹配。我应该做什
tf.reduce_mean() 函数以 axis 参数中引用的索引的方式对数组元素求和。 在下面的代码中: import tensorflow as tf x = tf.Variable([1, 2
我有一个航类延误数据电子表格,我正在处理一个显示每个机场总延误时间的工作表。我想过滤维度“机场”,即根据每个机场的起飞次数创建机场类别,“小型”、“中型”和“大型”,这是通过计算维度“航类号”计算得出
如何在 3 列 X_train 数据上使用以下代码。错误 "ValueError: query data dimension must match training data dimension" 在
JavaScript:给定一个字符串数组: ['properties.dimensions.length', 'properties.name'] 在散列中使用这些来验证或访问它们(实际上只是想验证
JavaScript:给定一个字符串数组: ['properties.dimensions.length', 'properties.name'] 在散列中使用这些来验证或访问它们(实际上只是想验证
我有以下代码用于整数 vector 的 vector (即整数矩阵..) vector > scores (3, vector(2,0)); cout<
尽管已经有很多关于这个主题的答案,但在下面的例子中没有看到(摘自 https://gist.github.com/lirnli/c16ef186c75588e705d9864fb816a13c on
我有一堆保证有的图片: 最小宽度 = 200 像素 最大宽度 = 250 像素 最小高度 = 150 像素 最大高度 = 175 像素 我想要做的是显示一个由 200 像素 x 150 像素组成的图像
转tensorrt时报错: input: kMAX dimensions in profile 0 are [2,3,128,128] but input has static dimensions
我正在尝试对在 UCI 机器学习数据库中找到的一些文本识别数据进行 k 最近邻预测。 (https://archive.ics.uci.edu/ml/datasets/Letter+Recogniti
如何有效地在更高维空间上追踪等值面 最佳答案 你有一个 N 维的标量成本函数, f(y0, y1, .., yN) ∊ ℝ, y ∊ ℝ 但仅在规则的矩形网格中采样, yk = Ψk + ψk x
我正在尝试根据《Doing Bayesian Data Analysis: A Tutorial with R, JAGS, and Stan (2015)》一书来学习贝叶斯分析。 这本书里有例子。所
LEt x_t = F(x_{t-1}) 是 chaotic regime. 中的一个时间离散动力系统 从初始条件x_0开始,我们可以生成一个时间序列=x_t,其中t =1,2,...,T 表示时间索
当我尝试使用: const {width, height} = Dimensions.get('window'); 在 React Native 组件上,我收到一个以前从未见过的奇怪错误: 找不到变量
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 2 年前。 Improve
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 9 年前。 Improve
我是一名优秀的程序员,十分优秀!