2017-11-23 11 views
0

このシナリオでは、これをよりOOP的な方法でどのように実装するのかは完全にはわかりません。この場合instanceofを使用する代わりに?

  • 私のゲームはスーパークラスのエンティティ
  • クリーチャーズ(移動エンティティ)とStaticEntities(木/岩の/ etc)私はEntityManagerのクラスを持つエンティティ
  • を拡張しています

    は、次のコンテキストを考えます。

私のEntityManagerでは、自分のマウスがエンティティ上にマウスを乗せているかどうかを確認します。この場合、Entityの名前を持つパネルを表示するオーバーレイをレンダリングします。

名前の他に、「健康」や「パワー/マックスヒット」などの基本的な統計情報を表示したいと考えています。スタティックエンティティには戦闘属性はありません。クリーチャーはしかし、しかし、私はエンティティを返すので、エンティティが 'instanceof'クリーチャーであるかどうかをチェックし、そうであれば:戦闘の統計を引きます。それ以外の場合は、エンティティの名前を描画します。

この構造を設計するには、より優れた、より多くの方法がありますか?私は多形性/ OO設計によってinstanceofが回避できることを読んだ。

関連のコードスニペット:このようなクラスのsytemsで

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

ようこそスタックオーバーフロー! [ツアー](ツアー)を見て回り、[ヘルプセンター](/ help)、特に[どのように良い質問をしますか?](/ help/how-to-質問)と[ここではどのような話題について聞くことができますか?](/ help/on-topic)あなたのコードの3行だけを見ることによってそれを伝える方法はありません。これはあなたのクラスの多くに影響を与える*デザイン*の質問です。 –

+0

表示する内容を返す 'getDisplayInfo()'メソッドが必要です。次に、それをオーバーライドして、必要なだけ多くの情報を提供することができます。あなたは現時点で、「xがエンティティであればxは生き物だとしたら、それはやっているのですが」と書かれています。 – Kayaman

答えて

0

EntityManager、抽象メソッドgetInfo()呼び出す(具象クラスStaticEntityCreatureで実装)、必要に応じに関する情報を取得することができます。
EntityManagerEntityの間にハード結合が導入されるため、最適な解決策ではないかもしれませんが、instanceOfを使用する必要はありません。

関連する問題