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