Использование Singleton может нарушать принцип единственной ответственности, потому что любой Singleton-класс отвечает сразу за две вещи: за то, что класс имеет лишь один объект, и за реализацию того, для чего этот класс вообще был создан. 2
Принцип единственной обязанности гласит, что каждый класс должен отвечать лишь за один какой-то аспект. 2 Если класс отвечает за несколько действий, то, внося изменения в один аспект поведения класса, можно затронуть и другой, что может сильно усложнить разработку. 2
Например, в одном классе есть код, который отвечает и за управление пользователями, и за запись логов в файл, и за работу с базой данных. 1 Это хрестоматийный пример «спагетти-кода», который сложно разобрать и поддерживать. 1