Порождающие шаблоны проектирования



бет15/15
Дата01.10.2022
өлшемі254,47 Kb.
#41019
1   ...   7   8   9   10   11   12   13   14   15

Достоинства и недостатки


Достоинства:

  • Для создания новых объектов клиенту необязательно знать их конкретные классы.

  • Возможность гибкого управления процессом создания новых объектов за счет возможности динамических добавления и удаления прототипов в реестр.

Недостатки:


  • Каждый тип создаваемого продукта должен реализовывать операцию клонирования clone(). В случае, если требуется глубокое копирование объекта (объект содержит ссылки или указатели на другие объекты), это может быть непростой задачей.

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


Часто в системе могут существовать сущности только в единственном экземпляре, например, система ведения системного журнала сообщений или драйвер дисплея. В таких случаях необходимо уметь создавать единственный экземпляр некоторого типа, предоставлять к нему доступ извне и запрещать создание нескольких экземпляров того же типа.
Шаблон «Одиночка» (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.

Достарыңызбен бөлісу:
1   ...   7   8   9   10   11   12   13   14   15




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет