gpt4 book ai didi

java - 存储接口(interface)实现和检索特定实现的良好模式是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:25:16 25 4
gpt4 key购买 nike

我正在编写一个模拟器,它有几个接口(interface),所有模拟对象都实现了这些接口(interface)。 Entity 接口(interface)具有所有对象都必须具有的方法,例如 ID 检索和推进对象状态的时间步长。 Collidable 扩展了 Entity,并表示在运行碰撞检测算法时应考虑的具有体积和位置的任何东西。 Field 扩展了 Entity,并表示将位置映射到值的任何内容;这些用于模拟磁场之类的事物,这些事物遍及世界但没有体积或物理形式。 RigidBody 是一个实现Collidable 并提供刚体动力学算法的类。我有一个 World 类,它管理所有 Entities 并具有推进模拟器时钟和划分世界的方法,以便更有效地进行碰撞检测。

我的问题涉及从 World 中检索 Entity 子类型。最初,World 仅有一张由 ID 键控的 Entities map ,要获取一个 FieldRigidBody,将会有是从映射中获取 Entity 并执行 instanceof 检查并强制转换为所需子类型的方法。然而,我很清楚 instanceof 的用法不受欢迎,所以我尝试了另一种方法。

目前,我在 World 中为每个界面都有单独的 map 。例如,Collidables 和所有 Entities 都有一个映射。 addCollidable() 方法将添加到两个 map ,而 getCollidable() 将仅从 Collidable map 中检索。这避免了 instanceof,但对我来说它仍然是糟糕的设计。如果我想出另一个接口(interface)来扩展 Entity,我将需要 World 中的另一个 map 和相应的方法。

我觉得这个问题不是很晦涩,那么在这种情况下通常会做什么?

编辑

我不相信访问者模式会在这里起作用,因为访问者模式允许您对具体类型进行分派(dispatch),而我的一些检索方法需要检索接口(interface)类型。例如,如果 World 只需要方法来检索 RigidBodies 和其他此类具体类,Visitor 就可以工作,但我无法创建一个检索所有 Collidables 的方法> 与访客。

最佳答案

在这里您可以使用访问者模式,本访问者模式教程使用它来解决您遇到的类似问题。 http://www.youtube.com/watch?v=KSEyIXnknoY

关于java - 存储接口(interface)实现和检索特定实现的良好模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10068897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com