Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шаблоны проектирования (порождающие).docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
261 Кб
Скачать
☆

Шаблон «Одиночка»

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

Шаблон «Одиночка» (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.