der*_*fed 9 java simulation interface subclass
我正在编写一个模拟器,它有几个接口,所有模拟对象都可以实现.所述Entity接口具有所有的对象必须有方法,如ID检索和提前用于所述对象的状态的时间的步骤.Collidable扩展Entity,并表示在碰撞检测算法运行时应考虑的具有体积和位置的任何内容.Fieldextends Entity,并表示将位置映射到值的任何内容; 这些用于模拟诸如渗透到世界但没有体积或物理形式的磁场之类的东西.RigidBody是一个实现Collidable并提供刚体动力学算法的类.我有一个World管理所有的类,Entities并有方法推进模拟器的时钟和分区世界,以使碰撞检测更有效.
我的问题涉及Entity从中检索子类型World.最初,World只是有一个Entities由ID键入的地图,并且要解除一个Field或者RigidBody有一些方法可以抓住Entity地图并进行instanceof检查以及对所需子类型进行强制转换.我很清楚这种instanceof用法是不受欢迎的,所以我尝试了另一种方法.
目前,我在World每个界面都有单独的地图.例如,Collidables所有人都有地图和地图Entities.该addCollidable()方法将添加到两个地图,并将getCollidable()仅从Collidable地图中检索.这避免了instanceof,但对我来说它似乎仍然是糟糕的设计.如果我梦想扩展另一个接口Entity,我将需要另一个地图World和相应的方法.
我觉得这个问题并不是非常模糊,所以在这种情况下通常会做什么?
编辑
我不相信访问者模式在这里可行,因为访问者允许您调度具体类型,并且我的一些检索方法需要检索接口类型.例如,如果World只需要检索所需的方法RigidBodies和其他类似的具体类,则访问者将工作,但我无法创建一个方法来检索所有Collidables访问者.
| 归档时间: |
|
| 查看次数: |
238 次 |
| 最近记录: |