Слава за чтение книги. Большинство людей пытаются # 2 полагать, что - это шаблон фабричного метода, когда на самом деле # 1 претендует на описание двух основных разновидностей.
Итак, мы на самом деле имеем дело с тремя слегка отличающимися вариантами шаблона в цитируемом тексте, хотя только две из них пронумерованы. Различия между этими версиями основаны на том, сколько информации Creator
имеет о том, какую Product
реализацию он хочет.
- A
Creator
с abstract Factory Method знает ничего о реализации Product
и оставляет все до ConcreteCreator
. - A
Creator
с по умолчанию Factory Method знает, какую реализацию Product
он хочет большую часть времени , но не всегда; поэтому он позволяет ConcreteCreator
переопределить значение по умолчанию. - A
Creator
с параметризованным Factory Method имеет меню из Product
реализаций на выбор и решает, какую из них запросить. ConcreteCreator
for.
Таким образом, в каждой последовательной версии Creator
постепенно получает больше информации о Product
реализациях и больше логических c относительно того, как выбирается реализация.
В шаблоне Factory Method Creator
делегирует ответственность за создание объектов своим дочерним классам, потому что " не может предвидеть класс объектов, которые он должен создать. " (стр. 108) Основываясь на различных вариантах, мы можем увидеть, как шаблон немного меняется, когда Creator
может ожидать некоторую информацию о классе создаваемых объектов.
Выбор версии зависит от того, как много вы знаете о Product
реализациях во время компиляции.