Одиночка (Singleton) - Порождающие - Шаблоны проектирования - Каталог статей - Персональный сайт
Воскресенье, 20.05.2012, 21:17
Приветствую Вас Гость

Дневники разработчика

Меню сайта
Категории каталога
Структурные [3]
Структурные (Structural) шаблоны проектирования
Порождающие [1]
Порождающие (Creational) шаблоны проектирования
Главная » Статьи » Шаблоны проектирования » Порождающие

Одиночка (Singleton)
Singleton (одиночка) - шаблон, порождающий объекты.
Singleton гарантирует, что у класса есть только один экземпляр и
предоставляет к нему глобальную точку доступа (обычно статический метод).
Singleton реализует инициализацию по необходимости ("just-in-time initialization")
или инициализацию при первом обращении ("initialization on first use").
 
Участники
Одиночка
            - определяет операцию Instance (Экземпляр), которая дает доступ клиентам к
            его уникальному экземпляру
            - Instance - это публичный статический метод класса
            - все конструкторы класса объявлены как protected или private
            - ответственен за создание и манипулирование собственным уникальным экземпляром
 
Пример
В один момент времени может быть только один президент России и
только одно правительство. Если их будет несколько, то это будет называться
революция с соответствующим бардаком и неразберихой.
Так же и в программировании, в некоторых случаях нельзя допускать наличие более
чем одного объекта во избежание проблем.

Когда и где использовать шаблон Одиночка (Singleton)?
Большинство объектов приложения отвечают за собственную работу и управление
содержащихся в них данных и ссылок, которые располагаются в их зоне ответственности.
Однако, существуют объекты, которые имеют дополнительные обязанности и обладают
глобальным поведением, например объекты, управляющие ограниченными ресурсами или
мониторингом общего состояния системы.
 
Обязанности этих объектов часто требуют, чтобы существовал лишь один экземпляр
класса. Примерами могут служить кэшируемые записи базы данных или планировщик задач,
который регулярно отправляет почту с сообщениями бизнес процессов требующих внимания.
Наличие более чем одной базы данных или более одного планировщика задач может привести
к риску появления дубликатов или другого рода проблемам.
 
Другие части приложения используют эти специальные объекты, и им необходим способ
работы с ними. В этом случае на помощь приходит шаблон проектирования Одиночка.
Цель этого шаблона в том, чтобы гарантировать наличие единственного экземпляра класса
и обеспечивать глобальную точку доступа к этому экземпляру. Используя шаблон Одиночка,
вы централизуете доступ к конкретному ресурсу в одном объекте.
 
Другая причина использования шаблона Одиночка - улучшение производительности.
Общий сценарий, когда вы имеете объект без состояния, который создается снова и снова.
Шаблон Одиночка убирает необходимость в постоянном создании и уничтожении объектов.
Будьте осторожны, т.к. Одиночка может быть не лучшим решением в данном сценарии.
Альтернативой могут послужить статические методы класса. Одиночки имеют несчастливую
репутацию из-за чрезмерного их использования неопытными разработчиками.
К тому же глобальные объекты могут быть вредны для объектного программирования,
в некоторых случаях приводя к созданию немасштабируемого проекта.
 
Глобальные переменные рассматривают как признак плохого программирования,
но большинство разработчиков допускают необходимость использования нескольких глобальных объектов
или переменных. Используя шаблон Одиночка, вы можете оперировать одной или несколькими
глобальными переменными, и это может быть действительно удобно. Фактически, наиболее
частый способ использования шаблона Одиночка - использование его как места для
хранения и поддержки доступа к глобальным переменным.
 
Одиночка в .NET Framework
Примером использования шаблона Одиночка в технологии .NET Remoting может
послужить вызов активируемых на стороне сервера объектов. Один из режимов
активации серверных объектов называется Singleton (Одиночка) и его поведение
соответствует тому, что существует только один экземпляр в любой момент времени.
Если экземпляр существует, то все клиентские вызовы будут им обслужены.
Если же экземпляра не существует, тогда создастся новый экземпляр, и все последующие
клиентские запросы будут обслужены уже им.

Связь шаблона Одиночка с другими шаблонами
Шаблоны Абстрактная Фабрика, Строитель и Прототип могут использовать шаблон Одиночка
в своей реализации.

Фасад-объекты часто являются Одиночками, потому что только один объект-Фасад требуется.

Объекты, реализующие шаблон Состояние, часто являются Одиночками.

Ссылки
Наиболее подробное описание:
http://codelab.ru/pattern/singleton/

Пример с dofactory.com:
http://www.dofactory.com/Patterns/PatternSingleton.aspx

Wikipedia (english):
http://en.wikipedia.org/wiki/Facade_pattern

Статья с примерами на различных языках (english):
http://sourcemaking.com/design_patterns/singleton

Категория: Порождающие | Добавил: alekseiru (08.03.2009)
Просмотров: 1382 | Рейтинг: 5.0/1 |
Форма входа
E-mail:
Пароль:
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0