Что такое паттерн одиночка Java

Что такое паттерн одиночка JavaСогласно GoF, паттерн «Одиночка» гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа. В книге «Паттерны проектирования» дается такое же объяснение. Одиночки часто используются в со­четании с фабриками.

Одиночки, как правило, используются в следующих целях и случаях:

  • для получения доступа к совместно используемым данным, таким как конфи­гурационные данные, повсюду в контексте приложения;
  • чтобы улучшать производительность, загружать и кэшировать дорогостоящие ресурсы только один раз, разрешая глобальный совместный доступ;
  • для создания экземпляра регистратора для приложения, поскольку обычно необходим только один регистратор;
  • для управления объектами внутри класса, реализующего паттерн «Фабри­ка»;
  • для создания объекта «Фасад» так как обычно требуется только один такой объект;
  • для отложенного создания статических классов, поскольку одиночки могут быть инициализированы отложенно.

Spring использует одиночек при создании компонентов (по умолчанию компо­ненты Spring-одиночки), платформа jаvа ЕЕ применяет одиночек внутренним образом, как, например, в локаторе сервисов. Платформа Jаvа EE также использует паттерн «Одиночка» в реализации runtime класса. Так что одиночки определенно полезны, если вы используете их в правильной ситуации.

Тем не менее интенсивное применение паттерна «Одиночка» может означать ненужное кэширование ресурсов и препятствование возвращению сборщиком мусора объектов в пользование и освобождению им ценных ресурсов памяти. Оно также может означать. что вы на самом деле не используете выгоды от создания объектов и наследования.

Необычно интенсивное применение оди­ночек считается признаком плохого объектно-ориентированного проектиро­вания приложения, что может привести к проблемам с памятью и производи­тельностью. Другая проблема — одиночки не очень хорошо себя проявляют при поблочном тестировании приложения. Проблемы, сопровождающие ис­пользование паттерна «Одиночка», будут детальнее обсуждаться дальше в наших постах.