Встречается на собеседованиях • сегодня

Почему Singleton является антипаттерном

Singleton часто критикуют за несколько причин:

  1. Глобальное состояние – усложняет тестирование из-за скрытых зависимостей.
  2. Нарушение SRP – управляет своим жизненным циклом и логикой создания.
  3. Проблемы с многопоточностью – требует дополнительной синхронизации.
  4. Жёсткая связь – затрудняет замену реализации (например, для моков в тестах).

Пример проблемного Singleton:

java
public class Singleton {
    private static Singleton instance;
    
    private Singleton() {}
    
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton(); // Не потокобезопасно!
        }
        return instance;
    }
}

Альтернативы:

  • Внедрение зависимостей (DI) через конструктор/сеттер.
  • @Singleton в DI-фреймворках (Guice, Spring), где жизненный цикл управляется контейнером.

Использовать Singleton стоит только когда действительно нужен единственный экземпляр на уровне JVM (например, логгер).

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы