Skip to content

Latest commit

 

History

History
 
 

creational

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

Что абстрагируется?

Создание, инициализация объектов (инстанцирование).

Не важно, как именно создается объект, важно, какой интерфейс он имеет. Порождающие шаблоны устраняют зависимость системы от способов создания объектов. Это позволяет легко заменять разные объекты, имеющие одинаковый интерфейс (например, для тестирования).

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

Виды порождающих шаблонов

  • Шаблоны, порождающие классы (class-creation). Сами непосредственно контролируют создание объектов. Используют наследование для изменения наследуемого класса. Это значит, что порождающие механизмы (классы или методы), объединены в иерархию наследования - и порождаемые классы тоже объединены в отдельную иерархию. Порождающий механизм выбирает конкретный класс, объект которого будет создан.
    • Абстрактная фабрика, Фабричный метод - создание объектов с разным поведением;
    • Строитель - создание сложных объектов;
    • Прототип - создание копий.
  • Шаблоны, порождающие объекты (object-creation). Больше заботятся о создании объекта и его времени жизни, а само инстанцирование осуществляется другими.
    • Отложенная инициализация - управление временем создания объекта;
    • Синглтон - управление временем жизни объекта;
    • Пул объектов - управление количеством активных объектов.

Шаблоны

Порождение классов:

Порождение обектов и управление их жизнью:

Взаимодействие

Порождающие шаблоны часто используются совместно. Например, Строитель (заведующий детальным построением нужных объектов из различных компонентов) может быть дополнен другим паттерном, который будет определять набор этих компонентов. Прототип удобно сочетать с Одиночкой.