应用程序启动时的singleton



我正在创建一个小游戏,我想在游戏室里有一个游戏室和一堆游戏。这将是一个春季启动应用程序。所以我想在应用程序开始时启动GameRoom。然后,每当创建一个新游戏时,我都会将其添加到游戏roon中的游戏列表中。这是个好主意吗?或者是否存在任何潜在的陷阱。

public class GameRoon{
private static GameRoom instance = null;
List<Game> games = new ArrayList();
private GameRoom() {}
public static GameRoom getIsntance() {
if(instance == null) {
instance = new GameRoom();
}
return instance;
}
}

以上是我未完成的单身汉。。我有两个问题。1.在春季启动时启动这个是个好主意吗?2.在spring boot中使用这样的singleton更好吗?或者有更好的方法

单身汉备受争议,你总能找到使用和不使用它的理由。

在我看来,如果你的类职责是保持一个状态(想想有一些数据的注册表(,它在应用程序中是共享的,我认为没有任何问题。很明显,您共享数据,并且必须确保管理并发访问。

Singleton的主要缺点是测试:您有一个全局状态,但理想情况下,在单元测试期间,您希望测试一些代码,而不依赖于Singleton类(而不是mock(。多亏了Spring,您仍然可以解决这个问题:将GameRoom定义为Spring bean(默认范围为Singleton(,它像其他bean一样被注入。这允许在单元测试期间对其进行模拟,即使下面有单例行为。

最新更新