Одиночка (Singleton) — различия между версиями
Материал из Вики ИТ мехмата ЮФУ
Admin (обсуждение | вклад) (→Другое название) |
Admin (обсуждение | вклад) (→Варианты) |
||
(не показано 8 промежуточных версий этого же участника) | |||
Строка 2: | Строка 2: | ||
__NOTOC__ | __NOTOC__ | ||
=== Назначение === | === Назначение === | ||
+ | Обеспечивает наличие в системе только одного экземпляра заданного класса, предоставляет доступ к этому экземпляру. | ||
=== Описание === | === Описание === | ||
+ | Для некоторых классов важно чтобы существовал один экземпляр. Как это гарантировать? | ||
+ | Необходимо чтобы сам класс контролировал, что у него есть только один экземпляр и запрещал создание дополнительных экземпляров. | ||
=== Реализация === | === Реализация === | ||
==== Диаграмма классов ==== | ==== Диаграмма классов ==== | ||
− | [[Изображение: | + | [[Изображение:SingletonCommon.png]] |
==== Участники==== | ==== Участники==== | ||
− | * | + | *Singleton - одиночка |
+ | Определяет операцию Instance, которая позволяет клиентам получать доступ к единственному экземпляру. | ||
+ | Несет ответственность за создание этого экземпляра. | ||
=== Пример === | === Пример === | ||
<source lang="Csharp"> | <source lang="Csharp"> | ||
+ | class MainApp | ||
+ | { | ||
+ | static void Main() | ||
+ | { | ||
+ | Singleton s1 = Singleton.Instance(); | ||
+ | Singleton s2 = Singleton.Instance(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | class Singleton | ||
+ | { | ||
+ | static Singleton instance; | ||
+ | |||
+ | protected Singleton() | ||
+ | { | ||
+ | } | ||
+ | |||
+ | public static Singleton Instance() | ||
+ | { | ||
+ | if (instance == null) | ||
+ | { | ||
+ | instance = new Singleton(); | ||
+ | } | ||
+ | |||
+ | return instance; | ||
+ | } | ||
+ | } | ||
</source> | </source> | ||
=== Достоинства и недостатки === | === Достоинства и недостатки === | ||
− | * | + | *Контролируемый доступ к единственному экземпляру |
+ | *Допускает контролируемое число экземпляров | ||
=== Варианты === | === Варианты === | ||
− | * | + | *Порождение подклассов Singleton и выбор на этапе выполнения, какой подкласс порождать |
Текущая версия на 09:23, 30 сентября 2014
Назначение
Обеспечивает наличие в системе только одного экземпляра заданного класса, предоставляет доступ к этому экземпляру.
Описание
Для некоторых классов важно чтобы существовал один экземпляр. Как это гарантировать? Необходимо чтобы сам класс контролировал, что у него есть только один экземпляр и запрещал создание дополнительных экземпляров.
Реализация
Диаграмма классов
Участники
- Singleton - одиночка
Определяет операцию Instance, которая позволяет клиентам получать доступ к единственному экземпляру. Несет ответственность за создание этого экземпляра.
Пример
class MainApp
{
static void Main()
{
Singleton s1 = Singleton.Instance();
Singleton s2 = Singleton.Instance();
}
}
class Singleton
{
static Singleton instance;
protected Singleton()
{
}
public static Singleton Instance()
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
Достоинства и недостатки
- Контролируемый доступ к единственному экземпляру
- Допускает контролируемое число экземпляров
Варианты
- Порождение подклассов Singleton и выбор на этапе выполнения, какой подкласс порождать