2

異なるタイプのオブジェクトを1つのコレクションに入れるのは一般的に悪い考えであり、タイプを「オブジェクト」にすることでそれができることを認識していますが、代替案が思いつかない状況があり、他の誰かができることを願っています。

状況: ゲームのターンの終わりに、プレーヤーに効果的にデッキからカードを拾ってもらいたいです。カードは3種類のカードのいずれかになります。通常、カードはプレイヤーの手札に加わり、プレイヤーは標準的なアクションを実行できますが、プレイヤーがそのカードに固有のアクションを持つ特別なカードを取得する可能性があり、チャンスがあることを望んでいますプレイヤーの手札に入るのではなく、すぐにアクションを実行するカードを得るプレイヤーの。これらのタイプのカードは共通点がないのでインターフェースを共通にする意味がないように思えますが、デッキ内でランダムに混ぜて欲しいので、1つのコレクションにまとめたいと思います。

誰かにデザインの提案はありますか? (私はオブジェクト指向の設計にはかなり慣れていません)

4

1 に答える 1

5

インターフェイスを使用するというあなたのアイデアは正しい方向に進んでいました。ただし、「特別なアクション カード」にインターフェイスを実装させる必要はありませんCard。別のインターフェイスを作成し (たとえば、Deckable)、Cardインターフェイスにそれを継承させてから、そのインターフェイスを「特別なアクション カード」クラスに実装します。

interface Deckable {
    void takeAction();
}
interface Card extends Deckable {
    int getRank();
    int getSuit();
}
class PlayingCard implements Card {
    ...
}
class SpecialActionCard implements Deckable {
    ...
}

のリストを作成し、そのDeckable中に特別なカードを混ぜることができます:

List<Deckable> deck = new ArrayList<Deckable>();
于 2012-12-10T14:59:33.700 に答える