これは、新しいアプリを設計しているときに何度も直面する問題です。これを説明するために、サンプル問題を使用します。
私は単純なゲームを書いているので、プレイヤーのリストを保持したいと考えています。私にはいくつかの選択肢があります...
- 一部のクラスで静的フィールドを使用する
private static ArrayList<Player> players = new ArrayList<Integer>(); public Player getPlayer(int i){ return players.get(i); }
しかし、これはグローバルな状態です
- または、シングルトンを使用できます
class PlayerList{ private PlayerList instance; private PlayerList(){...} public PlayerList getInstance() { if(instance==null){ ... } return instance; } }
しかし、これはシングルトンなので悪いです
- 依存性注入
class Game { private PlayerList playerList; public Game(PlayerList list) { this.list = list; } public PlayerList getPlayerList() { return playerList; } }
これは良さそうですが、そうではありません。
Game 以外のオブジェクトを見る必要がPlayerList
ある場合 (これは通常のケースです)
、上記のいずれかの方法を使用して、Game クラスをグローバルに利用できるようにする必要があります。そのため、問題に別のレイヤーを追加するだけです。私は実際には何も解決しませんでした。
最適なソリューションは何ですか? (現在、私はシングルトンアプローチを使用しています)