Одна из вещей, которые склонны превращать его в кошмар, это если он содержит изменяемое глобальное состояние. Я работал над проектом, в котором повсеместно использовались синглтоны для вещей, которые должны были решаться совершенно по-другому (переход в стратегии и т. Д.). В некоторых случаях «де-синглтонизация» была серьезной перепиской частей система. Я бы сказал, что в большей части случаев, когда люди используют Singleton, это просто неправильно, потому что в первую очередь это выглядит красиво, но превращается в проблему, особенно в тестировании.