2

スーツと数字に列挙型を使用するStandardCardクラスを作成しようとしています。私は現在以下のコードを持っています。

私の問題は、デッキにカードを追加しているDriverクラスが列挙型にアクセスできる必要があることです。最近デザインパターンについて読んだので、StandardCardEnumsクラスを作成し、StandardCardクラス内にこのクラスのオブジェクトを作成してモジュール性を追加する必要があると感じました。これは行く方法ですか?私はそれから次のようなことをする必要があるのでそれは不格好に感じます

StandardCardEnum myEnums = new StandardCardEnum;
private StandardCardEnum.Suit suit;
etc.....

私の現在のコードは以下のとおりです。問題は次のとおりです。1)列挙型はカードクラス内にハードコーディングされており、重複は確実に発生します。2)Driverクラスは、デッキにカードを配置するために列挙型について知る必要があります。オブジェクトのカプセル化に違反しています。

より経験のある人は、これらのタイプの状況に適用し始めるための良い基準に私を向けることができますか?私はプログラミングからソフトウェア開発へと移行しようとしています。最小限の労力で、さまざまなカードゲーム、さらにはデッキ構成やカードタイプを追加できる、モジュラーカードゲームフレームワークを作成できることを望んでいます。

public class StandardCard extends Card
{
public enum Suit {CLUBS, DIAMONDS, HEARTS , SPADES };
public enum Number {ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING};

private Suit suit;
private Number number;

public StandardCard(StandardCard.Suit suit, StandardCard.Number number)
{
    this.suit = suit;
    this.number = number;
}

public StandardCard()
{
}

public Suit getSuit()
{
    return suit;
}

public Number getNumber()
{
    return number;
}

public void setSuit(Suit s)
{
    this.suit = s;
}

public void setNumber(Number n)
{
    this.number = n;
}
}
4

2 に答える 2

2

列挙型をトップレベルクラスとして独自のファイルに配置します。

于 2013-02-08T00:31:04.747 に答える
1

あなたはむしろあなたの列挙型を作るべきですstatic

public static enum Suit {CLUBS, DIAMONDS, HEARTS , SPADES };
public static enum Number {ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING};

このようにStandardCard.Suit.CLUBSして、コード内のどこからでも(たとえば、からDriver)それらにアクセスできますが、それらはまだカプセル化されていますStandardCard-この世界の外では意味がありません。

于 2013-02-08T00:51:00.583 に答える