Ответ 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.