在这种情况下使用instanceof的替代方法?

时间:2017-11-23 11:05:51

标签: java oop polymorphism instanceof

所以在这个给定的场景中,我并不完全确定如何以更多的OOP方式实现它。

鉴于以下背景:

  • 我的游戏有一个超类实体
  • 生物(移动实体)和StaticEntities(树/岩石/等)扩展实体
  • 我有一个EntityManager类。

在我的EntityManager中,我检查我的鼠标是否悬停在实体上。如果是这种情况,我会渲染一个叠加层,显示一个带有实体名称的面板。

除了名称之外,我还希望显示一些基本属性,例如' health'也许' power / max hit'或者其他的东西。静态实体没有战斗属性。然而,生物会这样做,但是因为我返回了一个实体,我会检查实体是否是' instanceof'生物,如果是这样:绘制战斗统计数据。否则只需绘制实体的名称。

有没有更好的,更多的OO方式来设计这个结构?我已经读过可以通过多态/ OO设计来避免instanceof。

相关代码段:

    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);
    }

1 个答案:

答案 0 :(得分:0)

使用类似这样的类系统EntityManager,调用抽象方法getInfo()(在具体类StaticEntityCreature中实现),可以检索所需的信息。
也许它不是最好的解决方案,因为它引入了EntityManagerEntity之间的硬耦合,但它不需要使用instanceOf