Посмотрите
вебинар по паттернам на Хеклете, где-то с 1:20 начинается обсуждение синглатона, к концу видео подводятся итоги.
Если кратко, синглатон — замена глобальной переменной, чтобы таскать с собой контекст приложения, его использование несет определенные ограничения. Лучше для контекста приложения использовать dependency container.
Вообще рекомендую посмотреть видео целиком, четко расставляет по полочкам про паттерны.