Единственный раз, когда вы должны использовать синглтон, это тот редкий случай, когда жизненно важно, чтобы когда-либо был только один из этих объектов. Это просто не так часто, как вы думаете.
Довольно часто более чем достаточно просто создать один экземпляр рассматриваемого класса, но не задействовать весь механизм, необходимый для обеспечения уникальности объекта.
Каждый раз, когда я использовал синглтон (или нашел его в кодовой базе, с которой я работаю), я заканчивал тем, что удалял его, потому что мне нужно было изменить поведение, и мешал синглтонному механизму. Я еще не видел случая в нашем коде (обработка платежей), где синглтон действительно имел смысл. У меня было больше, чем несколько случаев, когда у меня был только один экземпляр определенного класса, но ни в одном случае принудительное применение этого через шаблон синглтона не было необходимым или полезным.