Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Синглтон (Singleton) Java: Объектно-ориентированный дизайн

Синглетон это широкоизвестный шаблон проектирования используемый в том случае, когда нужно ограничить класс созданием ровно одного объекта. Реализация этого шаблона базируется на том, что конструктор делается приватным. Объект такого класса можно получить только через статический метод getInstance().

public class Singleton {
    // Инстанс класса
    private static Singleton instance;

    // Приватный конструктор
    private Singleton() {
    }

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

    // Другие методы класса
}

Singleton::getInstance();

В этом коде объект класса хранится в приватном статическом свойстве instance. Получить этот объект можно только с помощью статического метода getInstance(), который создает объект в случае необходимости. Таким образом достигается условие наличия ровно одного объекта этого класса на запущенное приложение.

Несмотря на свою простоту и привлекательность, опыт многих приложений показал, что синглетон создает больше проблем, чем помогает. Фактически, синглетон это глобальная переменная со всеми вытекающими минусами.

  • Классы начинают неявно зависеть от синглетона, который используется в коде напрямую.
  • Любая часть приложения в любой момент времени может изменить синглетон, что может привести к неожиданным последствиям и сложностям в отладке.
  • Обеспечение потокобезопасности синглетона в многопоточных приложениях может стать проблемой. Плюс это негативно влияет на производительность.

Кроме того, даже там где изначально казалось, что нужен ровно один объект, обычно оказывается, что неплохо бы иметь возможность создавать несколько разных объектов, например в целях тестирования. Разные тесты могут тестировать разные ситуации, в которых нужны по-разному сконфигурированные объекты. Синглетоны делают такое тестирование невозможным.

Из-за этих и многих других проблем, синглотон называют не паттерном, а антипаттерном. Поэтому программисты рекомендуют отказаться от синглетона в пользу инъекции зависимостей, о которой мы поговорим в курсе по Spring Boot.

Даже учитывая все сказанное, знать про существование синглетона важно, чтобы распознавать его в коде и применять альтернативные решения.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Научитесь разработке веб-приложений, сайтов и программного обеспечения на языке Java, программируйте и используйте структуры данных
10 месяцев
с нуля
Старт 28 ноября

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу