【发布时间】:2017-11-23 11:05:51
【问题描述】:
所以在这个给定的场景中,我不完全确定如何以更 OOP 的方式实现它。
鉴于以下上下文:
- 我的游戏有一个超类实体
- 生物(移动实体)和静态实体(树木/岩石/等)扩展实体
- 我有一个 EntityManager 类。
在我的 EntityManager 中,我检查我的鼠标是否悬停在一个实体上。如果是这种情况,我会渲染一个叠加层,显示一个带有实体名称的面板。
除了名称之外,我还想显示一些基本统计数据,例如“健康”以及“力量/最大命中”或其他内容。静态实体没有战斗属性。然而,生物可以,但由于我返回一个实体,我检查该实体是否是“instanceof”生物,如果是:绘制战斗统计数据。否则只画实体的名字。
有没有更好、更面向对象的方式来设计这个结构?我已经读到 instanceof 可以通过多态/OO 设计来避免。
相关代码sn-p:
if(hoveringEntity instanceof Creature) {
hoveringEntity = (Creature) hoveringEntity;
// Custom Util class to draw a String
Text.drawString(g, "Max hit: " + getDamage(hoveringEntity), x, y, true, Color.YELLOW, Assets.font14);
}
【问题讨论】:
-
欢迎来到 Stack Overflow!请拿起tour,环顾四周,并通读help center,尤其是How do I ask a good question? 和What topics can I ask about here?。仅查看 3 行代码是无法说明这一点的。这是一个影响很多课程的设计问题。
-
应该/可能有一个
getDisplayInfo()方法返回应该显示的内容。然后,您可以覆盖它以提供尽可能多或尽可能少的信息。您现在正在以一种命令式的方式写作,“如果 x 是实体,请执行此操作,如果 x 是生物,请执行此操作”,而应该更多的是“让 x 做它需要做的事情”。
标签: java oop polymorphism instanceof