Singleton — это порождающий паттерн проектирования, который гарантирует, что у класса есть только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру. Применяется, когда нужен единый объект для управления общим ресурсом или состоянием.
Принцип работы:
- Приватный конструктор, чтобы запретить создание новых экземпляров с помощью
new.
- Приватное статическое поле для хранения единственного экземпляра.
- Публичный статический метод, который предоставляет доступ к экземпляру:
- Проверяет, создан ли экземпляр.
- Если нет, создает его и сохраняет в статическом поле.
- Возвращает созданный или существующий экземпляр.
Пример на Java:
java
Применение в QA Automation:
- Управление настройками конфигурации тестов (файлы свойств, переменные окружения).
- Единственный экземпляр драйвера браузера (WebDriver) в случае, когда для всех тестов используется один и тот же драйвер.
- Менеджер логов или отчетов.
- Пул соединений с базой данных.
Преимущества:
- Гарантирует наличие только одного экземпляра.
- Предоставляет удобную точку доступа к экземпляру.
- Ленивая инициализация (создается только по первому запросу).
Недостатки:
- Может скрывать зависимости.
- Усложняет модульное тестирование, так как синглтон — это глобальное состояние.
- Нарушает принцип единственной ответственности (класс может быть ответственным и за свою логику, и за управление своим жизненным циклом).
- Могут возникнуть проблемы с многопоточностью, если не реализовать должным образом.