0

だから私はこの要件を持っています:

  • Destinationというクラス
  • Destinations という HashMap

Destination クラスには、タイプ Door のオブジェクトの配列があります。つまり、基本的にファイルから「ドア」を読み取り、すべてのドアには属性「宛先」があり、それがどの宛先に属しているかを示します。

私の質問は、何が良いですか?:

a) 新しいドアの宛先が HashMap 宛先に存在するかどうかを確認する宛先を保持するオブジェクト内のメソッド。したがって、そのドアを既存の宛先に挿入するか、新しい宛先を作成してからドアを挿入します。

b) Destinations HashMap の add メソッドをオーバーライド (?) し、前述の機能をそこに実装します。

c) 別の方法。

ありがとうございました。

4

1 に答える 1

3

Java や同様の言語では、(より動的な言語で行うように) 単純なリスト、マップ、およびセットを作成するよりも、アプリケーションにとって意味のある名前でクラスを作成する可能性が高くなります。HashMap や ArrayList や HashSet をサブクラス化し、add メソッドや put メソッドをオーバーライドしている人はほとんど目にすることはありません。

最も「Java 風」なアプローチは、id でインデックス付けされた宛先オブジェクトのハッシュ マップを (フィールドとして)含むDestinationsことができるクラスを定義することです。次に、アプリケーションにとって意味のあるメソッドのみを作成します。

add(door, destination)

これにより、ゲーム ロジックをカプセル化できます。舞台裏にマップ (またはリストまたはセット) があることを誰も知る必要はありません。マップを公開するということは、アプリケーションにリークのある抽象化が含まれていることを意味するため、回避する必要があります。

おそらくさらに良い:あなたにとって最も効果的なのは、

class Door

class Destination

すべての目的地の地図を目的地のフィールドにします。あなたがやろうとしていることをもっと知らなければ、それを言うのは難しい. クラスの数を最小限に抑えることは良い考えのようです。マップを Destination にカプセル化し、すべてのドアにアクセスするための静的メソッドを作成できますか?

別の Destinations クラスを作成する場合は、次のようにマップをカプセル化します。

class Destinations {
    private static Map<Integer, Destination> map = ...

    public static void add(Door door, Destination destination) ...
}

呼び出しを次のようにします。

Destinations.add(door, destination);

または、宛先マップをシングルトンにすることもできます。シングルトンとユーティリティ クラスの質問について意見を聞くのはいつでも楽しいものです。アプリケーションに最適なものをご覧ください。

java.util.HashMapTL;DR: 別のクラス内にマップを非表示にして、クライアントが次のいずれかを使用していることを認識しないようにします。

  • Destinations静的メソッドを持つユーティリティ クラス
  • シングルトンクラスDestinationInfo
  • Destinationモデル オブジェクト自体の内部に (静的メソッドを使用して) 静的フィールドとして隠されているマップ。
于 2013-08-09T23:38:22.707 に答える