синглтон широко обсуждается, и вы всегда найдете причины для его использования, а не для.
По моему мнению, если ваша классовая обязанность состоит в том, чтобы удерживать состояние (например, реестр с некоторыми данными), которое совместно используется в приложении, я не вижу никаких проблем.
Ясно, что вы делитесь данными и должен обязательно управлять параллельным доступом.
Основным недостатком Singleton является testing : у вас есть глобальное состояние, но в идеале во время модульного тестирования вы хотите протестировать некоторый код, не полагаясь на singleton class (вместо этого фиктивное).
Вы все еще можете решить эту проблему благодаря Spring: определите GameRoom как Spring bean (область по умолчанию - Singleton), который вводится как любой другой bean. Это позволяет имитировать его во время модульного тестирования, даже если под ним присутствует одноэлементное поведение.
Надеюсь, это поможет.