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.HashMap
TL;DR: 別のクラス内にマップを非表示にして、クライアントが次のいずれかを使用していることを認識しないようにします。
Destinations
静的メソッドを持つユーティリティ クラス
- シングルトンクラス
DestinationInfo
Destination
モデル オブジェクト自体の内部に (静的メソッドを使用して) 静的フィールドとして隠されているマップ。