Ответ
Singleton (Одиночка) — это порождающий паттерн проектирования, который гарантирует, что у класса существует только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.
Базовая реализация на Java (ленивая, не потокобезопасная):
public class Singleton {
// Статическая переменная для хранения единственного экземпляра
private static Singleton instance;
// Приватный конструктор блокирует создание объектов через new
private Singleton() {
// Инициализация
}
// Публичный статический метод для получения экземпляра
public static Singleton getInstance() {
if (instance == null) { // Ленивая инициализация
instance = new Singleton();
}
return instance;
}
}
Проблемы и улучшения:
- Потокобезопасность: Базовая реализация не безопасна для многопоточности. Два потока могут одновременно пройти проверку
instance == nullи создать два экземпляра. - Потокобезопасная реализация с
synchronized:public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; }Недостаток: Синхронизация всего метода снижает производительность.
- Реализация через статическое поле (Eager Initialization):
private static final Singleton instance = new Singleton(); public static Singleton getInstance() { return instance; }Плюс: Потокобезопасна. Минус: Экземпляр создается при загрузке класса, даже если он не используется.
Типичные случаи использования: Логгеры, подключения к базам данных, кеши, конфигурационные объекты, пулы потоков.