Перейти к основному содержимому

Паттерн "Одиночка" (Singleton) в Java — один экземпляр и контролируемый доступ

Разработчику Архитектору

Обзор — в порождающих паттернах. Здесь — практическая реализация Singleton на Java и границы уместности.

Загрузка редактора схем…

Задача паттерна

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), чтобы упростить управление жизненным циклом и мокирование.


См. также

См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").