C# 设计简单模拟器时的设计考虑
我正在尝试用C#创建一个简单的模拟器,它应该模拟一个非常简单的汽车发动机。模拟器可以打开或关闭,例如,它将具有以下输入(将来可能会有更多) 用例: 在此示例中,汽车发动机将具有以下输入参数:C# 设计简单模拟器时的设计考虑,c#,design-patterns,simulator,C#,Design Patterns,Simulator,我正在尝试用C#创建一个简单的模拟器,它应该模拟一个非常简单的汽车发动机。模拟器可以打开或关闭,例如,它将具有以下输入(将来可能会有更多) 用例: 在此示例中,汽车发动机将具有以下输入参数: 产生的推力(0-100%) 温度(-50摄氏度至300摄氏度) 数量(启用/禁用) 驾驶模式(经济/正常/速度) 开/关 这些输入参数将改变以下两个输出参数: 产生的推力(0-150%) 温度(-50摄氏度至300摄氏度) 例如,如果驾驶模式设置为经济型,则其可输出的最大推力为70%。NOS也会以某
- 产生的推力(0-100%)
- 温度(-50摄氏度至300摄氏度)
- 数量(启用/禁用)
- 驾驶模式(经济/正常/速度)
- 开/关
- 产生的推力(0-150%)
- 温度(-50摄氏度至300摄氏度)
提前感谢鉴于汽车发动机模拟器是一组输入和输出参数,这取决于对其他参数的更改,我建议使用Observer模式
例如,
DrivingMode
参数将是DrivingMode
的观察者,当DrivingMode
参数更改时,它必须通知其观察者,包括DrivingMode
,然后重新计算推力并将其限制在70%,然后触发事件以通知推力已更改 你应该实施几种模式,让你的生活更轻松。如果您熟悉Unity游戏引擎,请使用其概念。我建议你使用这个游戏引擎,如果你的目标是建立游戏
首先,使用游戏循环和更新模式
在模拟中,需要在渲染帧的一个更新事件中计算多个FixeUpdate事件。FixedUpdate不应依赖于当前FPS
然后,您可以实现某种类型的总线,就像在实际的汽车中使用can-Bus一样。它可以通过观察者/可观察者或订阅者/发布者完成。您可以在这里了解差异,但我建议您使用订阅者/发布者,因为它类似于消息队列
要实施不同的模式(经济型、赛车型),您可能需要策略模式
此外,组件模式将有助于模拟真实汽车中的设备和传感器。每个组件对象从总线队列读取消息并向总线发送事件。某些部件(如ECU或EMS)可以使用当前策略为喷油器发送命令
状态模式将帮助您维护组件的不同状态。例如,发动机循环状态
您的问题非常广泛,但我建议您选择一些现实生活中的概念,并通过类比进行代码设计
请参阅这本好书,了解更多关于上述模式的信息:您在UI中使用的框架是什么?Winforms?WPF?团结?