0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Синглетон это широкоизвестный шаблон проектирования используемый в том случае, когда нужно ограничить класс созданием ровно одного объекта. Реализация этого шаблона базируется на том, что конструктор делается приватным. Объект такого класса можно получить только через статический метод getInstance().</p>
1
<p>Синглетон это широкоизвестный шаблон проектирования используемый в том случае, когда нужно ограничить класс созданием ровно одного объекта. Реализация этого шаблона базируется на том, что конструктор делается приватным. Объект такого класса можно получить только через статический метод getInstance().</p>
2
<p>В этом коде объект класса хранится в приватном статическом свойстве instance. Получить этот объект можно только с помощью статического метода getInstance(), который создает объект в случае необходимости. Таким образом достигается условие наличия ровно одного объекта этого класса на запущенное приложение.</p>
2
<p>В этом коде объект класса хранится в приватном статическом свойстве instance. Получить этот объект можно только с помощью статического метода getInstance(), который создает объект в случае необходимости. Таким образом достигается условие наличия ровно одного объекта этого класса на запущенное приложение.</p>
3
<p>Несмотря на свою простоту и привлекательность, опыт многих приложений показал, что синглетон создает больше проблем, чем помогает. Фактически, синглетон это глобальная переменная со всеми вытекающими минусами.</p>
3
<p>Несмотря на свою простоту и привлекательность, опыт многих приложений показал, что синглетон создает больше проблем, чем помогает. Фактически, синглетон это глобальная переменная со всеми вытекающими минусами.</p>
4
<ul><li>Классы начинают неявно зависеть от синглетона, который используется в коде напрямую.</li>
4
<ul><li>Классы начинают неявно зависеть от синглетона, который используется в коде напрямую.</li>
5
<li>Любая часть приложения в любой момент времени может изменить синглетон, что может привести к неожиданным последствиям и сложностям в отладке.</li>
5
<li>Любая часть приложения в любой момент времени может изменить синглетон, что может привести к неожиданным последствиям и сложностям в отладке.</li>
6
<li>Обеспечение потокобезопасности синглетона в многопоточных приложениях может стать проблемой. Плюс это негативно влияет на производительность.</li>
6
<li>Обеспечение потокобезопасности синглетона в многопоточных приложениях может стать проблемой. Плюс это негативно влияет на производительность.</li>
7
</ul><p>Кроме того, даже там где изначально казалось, что нужен ровно один объект, обычно оказывается, что неплохо бы иметь возможность создавать несколько разных объектов, например в целях тестирования. Разные тесты могут тестировать разные ситуации, в которых нужны по-разному сконфигурированные объекты. Синглетоны делают такое тестирование невозможным.</p>
7
</ul><p>Кроме того, даже там где изначально казалось, что нужен ровно один объект, обычно оказывается, что неплохо бы иметь возможность создавать несколько разных объектов, например в целях тестирования. Разные тесты могут тестировать разные ситуации, в которых нужны по-разному сконфигурированные объекты. Синглетоны делают такое тестирование невозможным.</p>
8
<p>Из-за этих и многих других проблем, синглотон называют не паттерном, а антипаттерном. Поэтому программисты рекомендуют отказаться от синглетона в пользу инъекции зависимостей, о которой мы поговорим в курсе по Spring Boot.</p>
8
<p>Из-за этих и многих других проблем, синглотон называют не паттерном, а антипаттерном. Поэтому программисты рекомендуют отказаться от синглетона в пользу инъекции зависимостей, о которой мы поговорим в курсе по Spring Boot.</p>
9
<p>Даже учитывая все сказанное, знать про существование синглетона важно, чтобы распознавать его в коде и применять альтернативные решения.</p>
9
<p>Даже учитывая все сказанное, знать про существование синглетона важно, чтобы распознавать его в коде и применять альтернативные решения.</p>