DSF*_*DSF 3 java oop simulation model-view-controller design-patterns
我正在用Java构建模拟.所以,我将我的模拟分为两部分:
1)模拟引擎
2)仿真模型
基本上我想要一些关于如何分割它的帮助(提示/建议),即什么去哪里.
所以我认为引擎会跟踪时间.它将监听事件,当事件到达时,它将更新模拟的状态(我正在构建离散事件模拟).仿真模型将具有GUI,它将从实际引擎获取逻辑和数据.我认为该模型将提供实际事件作为引擎的输入.我一直在考虑汽车类比,其中发动机是汽车车身,模型是驾驶员.所以我希望它的行为就像驾驶员(模型)告诉汽车(发动机)该做什么,即什么时候转弯以及什么速度等等
你认为我是以正确的方式解决这个问题吗?我能感觉到我听起来有点混乱而且不太清楚.所以我只是澄清一下,我正在寻找的只是一些输入,我应该如何拆分它以及引擎和模型的实际应该是什么.
另外,我想知道,如果我要实现MVC设计模式,那么我将如何尝试将其分解?
编辑:
根据模型,我的意思是我希望模拟具有一组特定的规则,然后引擎遵循这些规则.当我正在建造一个道路交通模拟器时,规则可能就像汽车的分布,驾驶员档案,汽车可能会和不可以做什么(例如停止红灯)等等.所以模型就像是"大脑"模拟,如果你得到我的意思,然后引擎是模型指定的"规则"集的实际模拟.我希望这更有意义.
可能不是很适用,但对于MVC方法(模型 - 视图 - 控制器),它是相当广泛和接受的,控制器似乎对应于你所谓的引擎.模型就是这样 - 一堆简单的转储Java对象,尽可能少的逻辑,只包含它们所代表的真实世界对象的属性.
因此,使用MVC的这个类比,你将把你的模型作为道路,汽车的集合,只包含对象的坐标和引擎将移动汽车,检测碰撞等.
一轮完成后,您将获得模型的更新版本(一些车辆处于新位置,新速度,一些建筑物正在燃烧(嘿)等).并且您将处理这个更新的模型到您的视图(无论它可能是什么)进行渲染.
我唯一不确定的是系统的哪个部分将提供输入事件.在通常的MVC中,这是一些外部实体(通常是人类操作员).如果事件是指人类输入,那么对于您的应用程序来说它将是相同的.如果你的意思是碰撞等事件,比如汽车的运动 - 那么它的引擎本身会产生这样的事件,就像模拟每一步的计算结果一样.
虽然,这不是很经典的OO设计.在经典的OO设计中,您将获得具有内部逻辑的模型类,例如汽车,这将定义汽车突然改变它的速度.我不会这样做,因为它使你的代码逻辑分布在模型类和控制器类之间.您在世界的开始处拥有一组模型对象,唯一的方法是通过引擎决策影响它们,或者拥有真正的外部输入(如人类的GUI输入).如果您需要模型对象来改变它的行为,它应该是引擎代码的责任,而不是模型代码.
对于这个相当不连贯的猜测感到抱歉,这是一个相当广泛的主题,并且有很多关于这类事情的书籍.