这是我在设计新应用程序时经常遇到的问题。我将使用一个示例问题来解释这一点。
我正在写简单的游戏,所以我想保存一个玩家列表。我有几个选择...
- 在某个类中使用静态字段
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 类全局可用。所以我只是为问题添加了另一层。我实际上并没有解决任何问题。
最佳解决方案是什么?(目前我使用单例方法)