- •Шаблон «Фабричный метод»
- •Реализация шаблона «Фабричный метод»
- •Пример реализации для обобщённого конструктора
- •Пример классической реализации
- •Достоинства и недостатки
- •Шаблон «Абстрактная фабрика»
- •Пример реализации абстрактной фабрики
- •Достоинства и недостатки
- •Шаблон «Строитель»
- •Пример реализации шаблона «Строитель»
- •Достоинства и недостатки
- •Шаблон «Прототип»
- •Пример реализации шаблона «Прототип»
- •Реализация шаблона на базе обобщённого конструктора
- •Реализация шаблона на базе выделенного класса-фабрики
- •Достоинства и недостатки
- •Шаблон «Одиночка»
- •Достоинства и недостатки
- •Задание
Шаблон «Одиночка»
Часто в системе могут существовать сущности только в единственном экземпляре, например, система ведения системного журнала сообщений или драйвер дисплея. В таких случаях необходимо уметь создавать единственный экземпляр некоторого типа, предоставлять к нему доступ извне и запрещать создание нескольких экземпляров того же типа.
Шаблон «Одиночка» (Singleton) предоставляет такие возможности.
Для того, чтобы у класса существовал единственный экземпляр, необходимо запретить создавать экземпляр класса извне и контролировать единственность внутри кода самого класса.
Это обеспечивается при помощи следующего решения:
Рисунок 13 Диаграмма классов для реализации шаблона «Одиночка»
Исходный код:
public class Singleton
{
private static Singleton _instance = null;
private Singleton()
{
}
public static Singleton GetInstance()
{
if (_instance == null)
_instance = new Singleton();
return _instance;
}
}
В данном примере реализован закрытый конструктор, который не даст создавать экземпляр класса извне.
Создание единственного экземпляра контролируется закрытым статическим полем _instance, которое инициализируется при первом обращении к получению экземпляра класса через метод GetInstance(), который предоставляет клиентам единственный экземпляр класса.
Достоинства и недостатки
Достоинства:
Класс сам контролирует процесс создания единственного экземпляра;
Шаблон легко адаптировать для создания нужного числа экземпляров;
Возможность создания объектов классов, производных от Singleton.
Недостатки:
В случае использования нескольких взаимозависимых одиночек их реализация может резко усложниться.
Задание
Для разработанной ранее иерархии классов реализовать каждый из порождающих шаблонов.
Работу необходимо разместить в GitLab.
