Соответствует ли шаблон фабричного метода шаблону, а абстрактный шаблон фабрики - нет? - PullRequest
1 голос
/ 06 июня 2019

В паттерне проектирования Гаммы и др. «Заводской метод» имеет следующую структуру:

enter image description here

«Абстрактная фабрика» имеет следующую структуру:

enter image description here

Почему Creator имеет метод AnOperation() для вызова FactoryMethod() в шаблоне Factory Method, тогда как AbstractFactory не имеет метода для вызова CreateProductA() и CreateProductB() в шаблоне Abstract Factory?

Метод Creator AnOperation(), вызывающий FactoryMethod(), следует шаблону, структура которого

enter image description here

Ответы [ 4 ]

1 голос
/ 07 июня 2019

Все просто: учитывая цель создания серверов «фабрики первого порядка» (в основном, кучу new правильных операторов), «абстрактный фактор» - или «фабрика высшего порядка» - это особый случай, когдаобъект сам по себе .. другая фабрика.Это похоже на список списков.

PS У вас также может быть фабрика, которая создает фабрику, которая создает фабрику.Это не будет полезно в большинстве случаев реального мира, хотя идеально подходит под определение «фабрики более высокого порядка».

1 голос
/ 07 июня 2019

Ни метод Factory, ни шаблон Abstract Factory не являются приложениями («следуют») шаблона проектирования Method Template. Хотя диаграмма классов UML их шаблона решения может выглядеть одинаково, на самом деле они помогают достигать разных целей.

Два фабричных шаблона связаны с тем, чтобы подклассы могли настраивать, как объекты определенного типа создаются . См. этот пост для обсуждения различий между различными фабричными образцами.

Шаблон проектирования Template Template не связан с созданием объектов, а скорее с введением точек вариации в алгоритм.

При этом все три паттерна объединены тем, что они отдают некоторое поведение подклассам . См. этот пост для альтернативного ответа на ваш вопрос.

1 голос
/ 07 июня 2019

Фабрика - это класс, предназначенный для создания экземпляров определенных типов.Это ЕДИНСТВЕННАЯ цель фабрики.С другой стороны, фабричный метод может существовать для любого не фабричного типа.Диаграмма фабричного метода пытается выразить это путем добавления произвольного метода (в UML метод называется операцией) к классу, чтобы показать, что его основная цель - не создавать экземпляры некоторых других типов.

Вы ошибаетесь, когда интерпретируете диаграмму, как AnOperation() вызывает FactoryMethod().Диаграмма говорит, что Creator - это абстрактный тип, который имеет абстрактный метод с именем FactoryMethod и конкретный (или неабстрактный) метод с именем AnOperation.ConcreteCreator происходит от Creator и наследует AnOperatio() (что не повторяется в спецификации класса UML, так как оно не является абстрактным) и абстрактный FactoryMethod().AnOperatio() и FactoryMethod() - два независимых метода.'

0 голосов
/ 07 июня 2019

Полагаю, вы имеете в виду шаблонный шаблон.

Соответствует ли шаблон фабричного метода шаблону?

Да, это так. Метод, который является фабричным методом , является в точности разновидностью шаблонного метода. Единственная особенность заключается в том, что метод фабрики создает и возвращает объект, а метод шаблона может делать все что угодно.

абстрактный шаблон фабрики не?

Нет, это не так. Шаблон Абстрактной фабрики следует шаблону Стратегии, в котором агрегация / композиция используется вместо наследование .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...