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

Из всех паттернов Одиночка имеет самую простую диаграмму классов. Однако несмотря на его простоту в его реализации кроется немало ловушек.

 

Паттерн Singleton часто называют усовершенствованной глобальной переменной.

 

Назначение паттерна Singleton

 

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

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

Паттерн Singleton предоставляет такие возможности.

 

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

«Одиночка» избавлен от недостатков глобальной переменной.

Главный из них тот, что если объект присваивается глобальной переменной и как правило вначале программы и объект расходует много ресурсов, а может никогда не использоваться приложением. Паттерн Одиночка позволяет создавать объекты в тот момент, когда они нужны (отложенная инициализация)

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

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

Паттерн Singleton предоставляет такие возможности.

 

Описание паттерна Singleton

 

Архитектура паттерна Singleton основана на идее использования глобальной переменной, имеющей следующие важные свойства:

 

- Такая переменная доступна всегда. Время жизни глобальной переменной - от запуска программы до ее завершения.

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

- Однако, использовать глобальную переменную некоторого типа непосредственно невозможно, так как существует проблема обеспечения единственности экземпляра, а именно, возможно создание нескольких переменных того же самого типа (например, стековых).

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: