Фабрика, Абстрактная Фабрика и Фабричный Метод - PullRequest
42 голосов
/ 17 января 2010

Я действительно смущен этими тремя терминами.

Мое понимание таково:

  • в фабричном образце нет бетонного завода. Завод строит новые объекты в соответствии с параметрами.

  • в шаблоне Абстрактная фабрика существует несколько конкретных заводов. Клиент должен явно создавать разные бетонные заводы.

Это верно?

Каковы другие различия?

Кроме того, что такое шаблон фабричного метода? Это так же, как шаблон «Фабрика»?

Ответы [ 3 ]

39 голосов
/ 17 января 2010

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

Заводской метод

В «Методе фабрики» у объекта есть метод, который отвечает за создание экземпляра другого объекта. Типичным примером может служить объект документа JavaScript и создание HtmlElement объектов:

var newDiv = document.createElement('div');

Это не очень хороший пример, поскольку важной частью Фабричного метода является полиморфизм. Если бы я мог расширить document, чтобы определить другой класс, который определяет другой createElement, это было бы основным материалом Factory Method.

Абстрактная фабрика

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

Типичным прямым примером является Фабрика Виджетов; В то время, когда был опубликован GoF, разработка кроссплатформенного графического интерфейса была немного хлопотной, так что вы могли определить класс фабрики абстрактных виджетов.

Этот класс может иметь методы createWindow, createButton, createScrollBar и т. Д. В свою очередь, будет определено несколько реализаций для создания Swing-виджетов, AWT или чего-либо еще. Затем, в зависимости от конфигурации, будет создан другой класс.

Приложение - Бетонный завод

Я считаю, что бетонная фабрика - это любая неабстрактная реализация абстрактной фабрики или метода фабрики.

Итак, когда я пишу свое собственное обобщение document, которое переопределяет createElement, класс, который я создаю, является бетонной фабрикой.

Аналогично, хотя WidgetFactory будет абстрактной фабрикой, SwingWidgetFactory будет бетонной фабрикой.

4 голосов
/ 19 мая 2010

ФАБРИКА ФАБРИКИ: возвращает предметы одной семьи
АБСТРАКТНАЯ ФАБРИКА: возвращает предметы более чем одного семейства.

Можно сказать, что абстрактная фабрика содержит более одной фабрики

4 голосов
/ 17 января 2010

Лучший способ научиться определенно читать. Взгляните на это: http://www.dofactory.com/Patterns/Patterns.aspx.

Фабричный метод откладывает создание объектов на подклассы. Это означает, что базовый класс / интерфейс определен, однако клиентский код не создает объект для этого интерфейса. Подклассы, которые реализуют интерфейс, оставлены для инициализации объекта.

Абстрактные фабрики можно найти здесь: http://www.dofactory.com/Patterns/PatternAbstract.aspx#_self2

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

http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29

http://javadesign -patterns.blogspot.com / - хорошее место для изучения шаблонов проектирования

...