Кажется, что список OP (превосходных) вопросов был проигнорирован.Текущие ответы просто предлагают перефразированные определения.Поэтому я попытаюсь ответить на первоначальные вопросы кратко.
- Если Абстрактная фабрика имеет только одного создателя и один продукт, это все еще Абстрактная фабрика шаблон?(интерфейс для создания фамилий)
Нет .Абстрактная фабрика должна создать более одного продукта, чтобы создать «семейство связанных продуктов».Канонический пример GoF создает ScrollBar()
и Window()
.Преимущество (и цель) заключается в том, что абстрактная фабрика может применять общую тему для нескольких своих продуктов.
Может ли Factory Method создатель бетона быть создан из интерфейса или он должен быть из класса?(классы откладывают создание экземпляров для подклассов)
Во-первых, мы должны отметить, что ни Java, ни C # не существовали, когда GoF написал свою книгу.Использование GoF термина interface не связано с типами интерфейса, введенными определенными языками.Следовательно, конкретный создатель может быть создан из любого API.Важным моментом в шаблоне является то, что API использует свой собственный фабричный метод, поэтому интерфейс только с одним методом не может быть фабричным методом, как абстрактная фабрика.
Если абстрактная фабрика может иметь только одного создателя и один продукт, единственное отличие между Абстрактной фабрикой и Фабричным методом в том, что создатель первого - это интерфейс исоздатель для последнего класса?
Этот вопрос больше не действителен, следуя ответам выше;однако, если вам кажется, что единственное различие между абстрактной фабрикой и фабричным методом заключается в количестве созданных продуктов, подумайте, как клиент использует каждый из этих шаблонов.Абстрактная фабрика обычно внедряется в своего клиента и вызывается с помощью композиции / делегирования.Фабричный метод должен быть унаследован.Так что все возвращается к старой дискуссии о композиции и наследовании.
Но эти ответы подняли четвертый вопрос!
Поскольку интерфейс только с одним методом не может быть Фабричным методом , как и Абстрактная Фабрика , , что мы называем креативныминтерфейс только с одним методом?
Если метод статический, его обычно называют Static Factory .Если метод нестатический, его обычно называют Simple Factory .Ни один из них не является шаблоном GoF, но на практике они используются гораздо чаще!