これは私が説明するために、サンプル問題を使用します新しいアプリ を設計していますときに私は多くの時間に直面している問題で、このグローバル国家とシングルトン依存性の注入
は私が欲しいシンプルgame.soを書いています考えています選手のリストを保持する。 私はいくつかのオプション..いくつかのクラスの静的フィールド1.use
private static ArrayList<Player> players = new ArrayList<Integer>(); public Player getPlayer(int i){ return players.get(i); }
しかし、この私はシングルトン
を使用することができるグローバルな状態2.orを持っています
class PlayerList{ private PlayerList instance; private PlayerList(){...} public PlayerList getInstance() { if(instance==null){ ... } return instance; } }
これは、それはシングルトン
3.Dependency注入
class Game { private PlayerList playerList; public Game(PlayerList list) { this.list = list; } public PlayerList getPlayerList() { return playerList; } }
だから、これは良いようだが、ゲーム外の任意のオブジェクトがある(PlayerListを見てする必要がある場合、それは、 ではありません悪いです通常の場合) Gameクラスをグローバルに使用できるようにするには、上記の方法の1つを使用する必要があります。 だから、問題に別のレイヤーを追加するだけです。実際には何も解決しませんでした。
最適なソリューションは何ですか? (現在私はシングルトンアプローチを使用しています)
kですが、どこかでPlayerListインスタンスを使用する場合はどうすればよいですか? – Manu
もう一度注射します。 Spring(あなたがJavaプログラムを提供する)のようなフレームワークは、これをもっと簡単にします。 サービスやシングルトン自体ではないため、PlayersListを合理的に挿入できないものは、何らかの種類のファクトリによって作成され、次にPlayersListで非常によく注入され、作成されたオブジェクトに渡されます。 しかし、各オブジェクトにPlayerListを挿入すると、デザインやカプセル化、情報の隠蔽に関する考え方が必要になります。 –