Factory, Аннотация Factory и Factory Метод

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

Я понимаю, что:

  • в шаблоне Factory отсутствует конкретный factory. Factory строит новые объекты в соответствии с параметрами.

  • в абстрактном шаблоне Factory есть несколько бетонных заводов. Клиент должен явно создавать разные конкретные заводы.

Правильно ли это?

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

Кроме того, что такое шаблон метода Factory? То же, что и шаблон Factory?

Ответы

Ответ 1

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

Factory Метод

В "Factory Method" у объекта есть метод, который отвечает за создание другого объекта. Общим примером может служить объект документа JavaScript и создание объектов HtmlElement:

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

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

Аннотация Factory

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

Типичным примером "прямо из книги" является виджет Factory; еще в тот день, когда был опубликован GoF, кросс-платформенная разработка графического интерфейса была немного сложной задачей, поэтому вы могли бы определить абстрактный класс виджета Factory.

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

Добавление - бетон Factory

Я считаю, что Concrete Factory представляет собой любую не абстрактную реализацию абстрактного метода Factory или Factory.

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

Аналогично, в то время как WidgetFactory будет абстрактным Factory, SwingWidgetFactory будет конкретным Factory.

Ответ 2

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

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

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

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

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

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

Ответ 3

FACTORY PATTERN: возвращает объекты одного семейства
АВТОРЕФЕРАТ < FACTORY: возвращает объекты более чем одного семейства.

Итак, вы можете сказать, что Abstract factory содержит более одного factory