Если вы любите хороший виски, то, возможно, слышали о The Singleton – известном бренде шотландского виски. Но если вы пишете на Java, слово Singleton (Одиночка) для вас – это один из ключевых паттернов проектирования. Давайте разберёмся, что он из себя представляет.
Что такое Singleton в Java?
Singleton – это шаблон проектирования, который гарантирует, что у класса будет только один экземпляр во всём приложении. Это полезно, когда нам нужен единый объект, управляющий ресурсами, например:
• База данных (единственное подключение)
• Логирование (единый логгер)
• Кеширование (единый кэш)
• Конфигурационные параметры (глобальный доступ)
Как реализовать Singleton в Java?
Для многих и многих задач в Java есть готовые классы. То есть по сути у нас класс Singleton уже есть, так же, как есть, к примеру, класс String. Берем этот класс и создаем нужный нам объект. Вот классический способ:
public class Singleton {
    private static Singleton instance;
    private Singleton() {
        // Приватный конструктор предотвращает создание экземпляров извне
    }
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
Теперь, где бы мы ни вызвали Singleton.getInstance(), всегда получим один и тот же объект.
Потокобезопасный Singleton
В многопоточной среде лучше использовать ленивую инициализацию с double-checked locking:
public class Singleton {
    private static volatile Singleton instance;
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
А если хочется более элегантное решение, используем Enum Singleton:
public enum Singleton {
    INSTANCE;
    public void doSomething() {
        System.out.println("Hello from Singleton!");
    }
}
Этот способ защищён от проблем с сериализацией и рефлексией.
Итог:
Singleton – не только виски, но и мощный инструмент в Java, который помогает управлять ресурсами приложения. Используйте его, когда действительно нужен один и только один экземпляр класса.
А виски лучше оставить для отдыха после хорошего кода. 🥃 😃
📌 А вы уже использовали Singleton в своих проектах? Делитесь в комментариях!
