次のクラスを使用してプログラムを作成したいと考えています: クラスPlayerは、get/set 関数を使用してプレーヤーに関する情報を格納します。Player は、get/set 関数を使用して独自のデータを持つAttackPlayerのようにすることができます。また、Player はProtectorPlayerのようにすることもできます。また、 AttackPlayerとは異なる get/set 関数を持つ他の独自のデータを使用することもできます。
また、 Player はTeamPlayerまたはFreePlayerにすることができ、これらの各クラスには独自のデータなどがあります。
問題は、階層を正しく実装する方法です。
最初は多重継承のことを考えていたのですが、これはとにかく良くありません。次のようなもの: Player AttackPlayer extends Player ProtectorPlayer extends Player
TeamPlayer は AttackPlayer または ProtectorPlayer を拡張します FreePlayer は AttackPlayer または ProtectorPlayer を拡張します
また、戦略パターンについても考えましたが、一般的なアルゴリズムがないため、ここでは適用できません。
そのような相互作用を整理するのに役立つアプローチはありますか?
これを行う別の方法は、Player クラスにフィールドを用意することです。これは、TeamPlayer/FreePlayer が Attack または Protector タイプであるかどうかを識別し、それに応じて適切なフィールドにアクセスするのに役立ちます。この場合、継承は次のようになります。
Player TeamPlayer 拡張 Player FreePlayer 拡張 Player
攻撃、保護の構造体またはクラスは継承せずに、Player クラスのフィールドとして使用します。
しかし、私はそのようなアプローチが好きではなく、より良いデザインを探しています.