2012-05-18 3 views
1

Как я anderstand:Почему существует два отдельные модели: Абстрактная фабрика и фабрика Метод

Абстрактный узор фабрики обеспечивает интерфейс для создания семейства объектов, тогда как метод фабрики обеспечивает интерфейс для создания одного объекта.

Если это различие между этими шаблонами, почему они рассматриваются отдельно?

+1

Возможный дубликат [В чем принципиальная разница между заводскими и абстрактными заводскими шаблонами?] (Http://stackoverflow.com/questions/1001767/what-is-the-basic-difference-between-factory-and-abstract -factory-patterns) Также см. http://stackoverflow.com/questions/2280170/why-do-we-need-abstract-factory-design-pattern – nawfal

ответ

3

Заводской метод исправлен - вы не можете изменить его во время выполнения.

Абстрактная фабрика позволяет создавать объекты с другой фабрикой, которые могут быть выбраны во время выполнения, в зависимости от некоторых критериев.

Button button = WinButtonFactory.create(); //will always be a "windows button" 
Button button = buttonFactory.create(); 

на 2-м, как это может быть WinButtonFactory extends ButtonFactory или MacOSXButtonFactory extends ButtonFactory. Вы можете передать один или другой в зависимости от текущей ОС.

+0

Итак, абстрактная фабрика не является несколькими методами Factory в абстрактном классе? – ASD

+0

Я читал: << Factory Method - Используется для реализации абстрактной фабрики. >> http://www.javabeat.net/2008/08/abstract-factory-pattern/ – ASD

+0

ну, это неправильно. Фабричный метод фактически не является даже шаблоном GoF. У них есть «фабрика» и «абстрактная фабрика». – Bozho

0

Аннотация заводской шаблон означает фабрику для заводов (конкретные реализации).

+0

вы не правы. – ASD

+1

Я думаю, что я прав. См. Эту ссылку: http: //www.oodesign.com/abstract-factory-pattern.html «Другими словами, абстрактная фабрика является суперзаводом, который создает другие фабрики (фабрика заводов)» – sul

+0

Что такое абстрактная фабрика Шаблон? Предоставьте интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов. Смотрите мою ссылку выше. Кто-то из нас не в порядке? Но кто такой? – ASD

3

Посмотрев назад на определение этих двух моделей говорит нам, что

  • Фабричный метод используется для определения интерфейса для создания объекта, но пусть подклассы решить, какой класс инстанцировать , Фабричный метод позволяет в класс отложить создание экземпляра на подклассы.»

  • Abstract Factory используется для обеспечения интерфейса для создания семей родственных или зависимых объектов без указания их конкретных классов.

Так то, что вы сказали, является правильным. Фабричный метод касается создания (обычно) одного объекта, тогда как абстрактная фабрика относится к нескольким связанным объектам.

Но это НЕ все, Второе слово, которое я выделил в каждом намерении, вы увидите, что есть еще одна разница, с точки зрения механизма, который работает каждый шаблон.

  • Фабричный метод использует SUBCLASSES и наследование для делегирования экземпляра конкретной реализации. Это означает, что для создания новых продуктов вам необходимо наследовать класс «создатель» и переопределить заводский метод. Этот заводский метод, в свою очередь, возвращает необходимый продукт.

  • С другой стороны, абстрактная фабрика использует функцию ОБЪЕКТА (то есть фабрику) для делегирования. Вы должны сделать изменение кода в классе «продукт», а не в классе создателя. В частности, внутри класса продукта вы определяете несколько связанных продуктов (например, ингредиенты продукта), каждый из которых может быть создан с использованием фабричного OBJECT (составленного в классе продукта и переданного во время выполнения). Класс создателя в этом случае создает только абстрактный продукт и передает в этот продукт фабрику, которую будет использовать продукт.

Чтобы сделать вещи немного запутанными, центральная абстрактная фабрика в абстрактной фабрике обычно реализует метод Factory. Этот центральный завод часто определяет ряд заводских методов для всех ингредиентов и делегирует создание каждого ингредиента на конкретные заводы.

Надеюсь, что это поможет. Помните, что многие шаблоны проектирования действительно похожи, и на самом деле они связаны между собой, например. посмотрите на узор Decorator и шаблон адаптера. В большинстве случаев разница между двумя шаблонами проектирования заключается в их соответствующих намерениях. Хорошая книга о Design Patterns, кстати, что я действительно люблю, это Head First Design Pattern. И есть аналогичный вопрос, размещенный here.

+0

Правильный ответ. Ключевым моментом является то, что метод Factory - это метод, а абстрактная фабрика - это объект с одним или несколькими заводскими методами. Мой ответ на дублирующий вопрос находится здесь: http://stackoverflow.com/questions/5739611/differences-between-abstract-factory-pattern-and-factory-method/5740020#5740020 –

Смежные вопросы