Паттерн "Одиночка" (Singleton) в Java — один экземпляр и контролируемый доступ
Модель и масштаб — Основы БД, опорные темы, проектирование БД, пакетная работа. Карта — о разделе.
Обзор — в порождающих паттернах. Здесь — практическая реализация Singleton на Java и границы уместности.
Play ITЗагрузка интерактивного демо…
Задача паттерна
Singleton гарантирует единственный экземпляр класса и предоставляет к нему общую точку доступа.
public final class AppConfig {
private static final AppConfig INSTANCE = new AppConfig();
private AppConfig() {
}
public static AppConfig getInstance() {
return INSTANCE;
}
}
Thread-safe варианты в Java
- eager initialization (
static final) — просто и безопасно; - holder idiom (вложенный
static class) — лениво и потокобезопасно; enum Singleton— защищает от сериализации/рефлексии лучше классического подхода.
Когда применять
- общий координатор;
- объект с дорогим созданием и глобальным использованием;
- инфраструктурный сервис с единственным инстансом по смыслу задачи.
Риски
Singleton добавляет глобальное состояние и скрытые зависимости, что усложняет тестирование и замену реализаций.
В enterprise Java чаще выбирают контейнерный singleton через DI (@Singleton, @Bean с singleton scope), чтобы упростить управление жизненным циклом и мокирование.