Книга «Банда четырех»: «Элементы многоразового объектно-ориентированного программного обеспечения» содержит две записи: «Абстрактная фабрика» (иначе «Виртуальный конструктор») и «Фабричный метод» ... Я не знаю о «Бетонной фабрике». " Я слышал этот термин, но никогда не задумывался о нем.
Заводской метод
В «Методе фабрики» у объекта есть метод, который отвечает за создание экземпляра другого объекта. Типичным примером может служить объект документа JavaScript и создание HtmlElement
объектов:
var newDiv = document.createElement('div');
Это не очень хороший пример, поскольку важной частью Фабричного метода является полиморфизм. Если бы я мог расширить document
, чтобы определить другой класс, который определяет другой createElement
, это было бы основным материалом Factory Method.
Абстрактная фабрика
Абстрактная фабрика предназначена для «предоставления интерфейса для создания семейств связанных или зависимых объектов без указания конкретных классов.
Типичным прямым примером является Фабрика Виджетов; В то время, когда был опубликован GoF, разработка кроссплатформенного графического интерфейса была немного хлопотной, так что вы могли определить класс фабрики абстрактных виджетов.
Этот класс может иметь методы createWindow
, createButton
, createScrollBar
и т. Д. В свою очередь, будет определено несколько реализаций для создания Swing-виджетов, AWT или чего-либо еще. Затем, в зависимости от конфигурации, будет создан другой класс.
Приложение - Бетонный завод
Я считаю, что бетонная фабрика - это любая неабстрактная реализация абстрактной фабрики или метода фабрики.
Итак, когда я пишу свое собственное обобщение document
, которое переопределяет createElement
, класс, который я создаю, является бетонной фабрикой.
Аналогично, хотя WidgetFactory
будет абстрактной фабрикой, SwingWidgetFactory
будет бетонной фабрикой.