Нюансы Java разработки
Блог о Java разработке и в деталях описывает наиболее интересные темы
Посты с тегом «pattern»
Все что вы хотели знать о Singleton
Шаблон проектирования Singleton (Одиночка) один из самых некорректно применяемых паттернов. В этой статье мы рассмотрим несколько реализаций синглтона, которые работают корректно в многопоточной среде, при выполнении задач сериализции и клонирования и даже при рефлексивных атаках.
Оглавление ✓Для чего используется singleton ✓Отличия от статических классов ✓Lazy или eager загрузка singleton? ✓Eager loading singleton ✓Грубая синхронизация ✓Double-checked locking синглтон ✓Initialization-on-demand holder идиома ✓Основанный на enum singleton ✓Проблемы с сериализацией и десериализацией ✓Проблемы с клонированием ✓Проблемы с рефлексией ✓Итак, почему синглтон может считаться анти-паттерном? ✓Заключение Для чего используется singleton Паттерн singleton используется в случаях когда существовать может ровно один экземпляр класса и он должен быть доступен через хорошо известную точку доступа или когда единственный экземпляр должен быть расширяем подклассами и клиенты должны иметь возможность использовать наследуемый экземпляр без модификации своего кода. Отличия от статических классов В JDK есть примеры использования и синглтонов и статических классов, с одной стороны java.lang.Math – final класс со статическими методами, с другой стороны java.lang.Runtime – синглтон. Преимущества singleton ✓Если вам требуется поддерживать состояние, то синглтон больше подходит, нежели статический класс, поскольку поддержка состояния в статических классах может привести к ошибкам, особенно в конкурентном окружении, что может приводить к состоянию гонки без адекватной синхронизации параллельных модификаций различными потоками. ✓Синглтон класс может быть «лениво» загружен, если это тяжелый объект, но у статического класса нет таких преимуществ и он всегда сразу загружается. ✓С синглтоном вы можете использовать наследование и полиморфизм для расширения базового класса, реализовать интерфейс и предоставлять различные реализации. ✓Поскольку с... Читать далее