Паттерн Singleton — это порождающий паттерн проектирования, который гарантирует существование только одного экземпляра класса и предоставляет глобальную точку доступа к нему.
Используется, когда требуется ровно один экземпляр класса, например, для менеджера конфигурации, пула подключений к базе данных или логгера.
Реализация:
- Приватный статический член класса для хранения единственного экземпляра.
- Приватный конструктор, запрещающий создание экземпляров извне.
- Статический публичный метод для получения экземпляра, который создает его при первом вызове (ленивая инициализация) или возвращает уже созданный.
Пример:
csharp
Преимущества:
- Гарантия единственности экземпляра.
- Контролируемый доступ к экземпляру.
- Ленивая инициализация (если реализована).
Недостатки:
- Может быть антипаттерном, если используется без веской причины.
- Усложняет модульное тестирование из-за глобального состояния.
- Нарушает принцип единой ответственности (управляет своим жизненным циклом).
- Проблемы с многопоточностью, если не реализована потокобезопасность.