0

私は生物学者であり、Java と OOP に関する古い知識を改善しようとしています。私は、優れたソフトウェア設計とモジュール性を実践するためにゲームを書く練習をしています (なぜ楽しいものを作るのでしょうか?)。

アイデアはリスクに似ていますが、国際銀行を使用しています。各銀行は異なる通貨を扱っています。各通貨は異なる額面を使用します。銀行はすべて同じ機能 (残高、引き出し、預金、交換) を提供するため、インターフェースでうまく機能します。各通貨単位とその値を表す Enum を使用して、通貨を適切に記述することもできます。

これは私の非常に単純な例です。ゲーム内の郡ごとに新しい Country() オブジェクトを作成できます。

1) 国ごとにそれぞれの通貨を手動で指定する必要がありますか? 例えば:

Country Canada = new Country(CANCurrency);

これはかなり不格好に思えますが、これを行うためのより良い方法があるはずです。

2) County() を使用するクラスから、その (間接的に含まれる) Enum 値に直接アクセスするにはどうすればよいですか?

各国はこんな感じ。

public class Country {

    private final String name;
    private ICurrency currency;

    public Country(String name, ICurrency currency) {
        this.name = name;
        this.currency = currency;
    }

    // How do I access the specific Enum constants here?

}

これは私のバンキングインターフェースです:

public interface IBank {
    // Standard banking methods.
    public void deposit(int amount);
    public void withdraw(int amount);
    public int balance();
    public int exchange (Currency demandType, int demand, Currency offerType, int offer);
}

各国の通貨は、額面を除いて、大部分は同様のコードになります。

public interface ICurrency {
    public Currency getCurrency();
    // Maybe some more helper methods here.
}

これはカナダの通貨です:

public enum CANCurrency interface ICurrency {
    LOONIE(1), TWONIE(2), FIVE(5); // etc....
}

米国の通貨:

public enum USACurrency interface ICurrency {
    ONE(1), FIVE(5), TEN(10); // etc....
}
4

1 に答える 1

1

単一の列挙型であっても、列挙型を使用して戦略を実装できます。実際、それが最善の方法です。通常、列挙型が不変でステートレスであることを確認するのが最善ですが、必須ではありません。

于 2013-07-14T21:01:50.317 に答える