Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Design Patterns via C#.pdf
Скачиваний:
154
Добавлен:
17.03.2016
Размер:
13.25 Mб
Скачать

83

Паттерн Singleton

Название

Одиночка

Также известен как

Solitaire (Холостяк)

Классификация

По цели: порождающий По применимости: к объектам

Частота использования

Выше средней - 1 2 3 4 5

Назначение

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

Введение

В реальной жизни аналогией объекта в единственном экземпляре может служить Солнце. Как бы мы не смотрели на него, мы всегда будем видеть одно и то же Солнце – звезду, вокруг которой вращается планета Земля, так как не может быть другого экземпляра Солнца, по крайней мере, для нашей планеты.

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

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

84

Структура паттерна на языке UML

См. Пример к главе: \005_Singleton\001_Singleton

Структура паттерна на языке C#

class Program

 

{

 

static void Main()

 

{

 

Singleton instance1 =

Singleton.Instance();

Singleton instance2 =

Singleton.Instance();

Console.WriteLine(ReferenceEquals(instance1, instance2));

instance1.SingletonOperation();

string singletonData = instance1.GetSingletonData();

Console.WriteLine(singletonData);

}

 

}

 

class Singleton { static Singleton uniqueInstance; string singletonData = string.Empty;

protected Singleton() { }

public static Singleton Instance() { if (uniqueInstance == null) uniqueInstance = new Singleton();

return uniqueInstance; }

public void SingletonOperation() { singletonData = "SingletonData"; }

public string GetSingletonData() { return singletonData; }

}

См. Пример к главе: \005_Singleton\001_Singleton

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]