Определение: предоставляет интерфейс для создания набора связанных или взаимозависимых объектов без указания их конкретных классов.
Тип: Создать диаграмму класса класса класса:
Разница между абстрактной заводской шаблоном и шаблоном завода метода
Абстрактная заводская шаблон - это обновленная версия заводского метода шаблона, которая используется для создания набора связанных или взаимозависимых объектов. Разница между ИТ и моделью метода заводского метода заключается в том, что модель фабричного метода нацелена на структуру иерархии продукта; в то время как абстрактная заводская модель нацелена на несколько структур иерархии продуктов. В программировании структура продукта обычно проявляется как интерфейс или абстрактный класс. То есть все продукты, предоставленные моделью метода заводских, получены из одного и того же интерфейса или абстрактного класса, в то время как продукты, предоставляемые абстрактной заводской моделью, получены из различного интерфейса или абстрактного класса.
В модели абстрактной фабрики существует концепция семейства продуктов: так называемое семейство продуктов относится к семейству продуктов, состоящих из функционально связанных продуктов в различных иерархиях продуктов. Серия продуктов, предоставленных Abstract Factory Model, образуют семейство продуктов; в то время как серия продуктов, предоставляемых заводским методом, называется иерархической структурой. Мы все еще используем пример производства автомобилей, чтобы проиллюстрировать разницу между ними.
На приведенной выше классовой диаграмме хэтчбек и седан называются двумя разными иерархическими структурами; в то время как 2,0 перемещающихся транспортных средств и 2,4 перемещающихся транспортных средств называются двумя разными семействами продуктов. Чтобы быть более специфическим, хэтчбек 2,0-смещения и хэтчбек 2,4-смещения принадлежат к той же структуре уровня, седан 2,0-смещения и седан 2,4-смещения принадлежат к другой структуре уровня; В то время как хэтчбек 2,0-смещения и седан с 2,0-смещением принадлежат к одному и тому же семейству продуктов, а хэтчбек 2,4-смещения и седан 2,4-смещения принадлежат другому семейству продуктов.
Как только вы поймете концепции иерархической структуры и семейства продуктов, вы поймете разницу между моделью фабричного метода и абстрактной заводской моделью. Если все продукты фабрики принадлежат к одной иерархической структуре, они принадлежат к модели фабрики; Если продукты завода поступают из нескольких иерархических структур, они принадлежат к абстрактной заводской модели. В этом примере, если заводская модель предоставляет хэтчбек 2,0 смещения и хэтчбек 2.4, то она принадлежит модели фабрики; Если заводская модель предоставляет два продукта, 2,4 смещения хэтчбека и 2,4 смещения седана, то эта заводская модель является абстрактной заводской моделью, потому что продукты, которые он предоставляет, принадлежат двум различным иерархическим структурам. Конечно, если фабрика предоставляет продукты всех четырех моделей, потому что продукты принадлежат к двум иерархическим структурам, она, конечно, также будет принадлежать к абстрактной заводской модели.
Пример
Давайте посмотрим на пример класса абстрактного класса заводского класса:
пакет AbstractFactory; Public Abstract Class AbstractCreator {// Создать метод продукта Public AbstractProducta createProducta (); // Создать метод B Продукт Public AbstractProductb createProductb ();}Аннотация класса продукта A
пакет AbstractFactory; Public Abstract Class AbstractProducta {// Метод, разделенный продуктом, публичный void shareMethod () {System.out.println («Метод обработки бизнес -логики, разделяемый продуктом A ...»); } // Метод различные подпродукты продукта. Общественная абстрактная void dosomething (); }Аннотация класса продукта B
пакет AbstractFactory; Public Abstract Class AbstractProductb {// Метод, разделенный продуктом B public void shareMethod () {System.out.println («Метод обработки бизнес -логики, разделяемый продуктом B ...»); } // Различные подпродукты продукта B Public Abstract void dosomething (); } Заводский класс класса класса AbstractFactory; Public Class Creator1 расширяет AbstractCreator {@Override Public AbstractProducta createProducta () {return new producta1 (); } @Override public AbstractProductb createProductb () {return new productb1 (); }} Заводская реализация пакета AbstractFactory; Public Class Creator2 расширяет AbstractCreator {@Override Public AbstractProducta createProducta () {return new producta2 (); } @Override public AbstractProductb createProductb () {return new ProductB2 (); }}Продукт A1
пакет AbstractFactory; Public Class Producta1 Extrable AbstractProducta {@Override public void doSomething () {System.out.println («Метод обработки бизнес -логики продукта A1 ...»); }}Продукт A2
пакет AbstractFactory; Public Class Producta2 Extrable AbstractProducta {@Override public void dosomething () {System.out.println («Метод обработки бизнес -логики продукта A2 ...»); }}Продукт B1
пакет AbstractFactory; Public Class ProductB1 Extrable AbstractProductb {@Override public void dosomething () {System.out.println ("Метод обработки бизнес -логики B1 ..."); }}Продукт B2
пакет AbstractFactory; Public Class ProductB2 расширяет AbstractProductB {@Override public void doSomething () {System.out.println ("Метод обработки бизнес -логики B2 ..."); }} Преимущества абстрактного заводского образца
В дополнение к наличию преимуществ модели метода завода, наиболее важным преимуществом является то, что семейство продуктов может быть ограничено в классе. Так называемое семейство продуктов, как правило, имеет определенную связь в большей или меньшей степени. Абстрактная заводская модель может определять и описывать взаимосвязь между семейством продуктов в классе без необходимости ввести новый класс специально для управления.
Недостатки абстрактного заводского образца
Расширение семейства продуктов будет очень трудоемкой задачей. Если в семейство продуктов необходимо добавить новый продукт, необходимо изменить почти все фабричные классы. Поэтому при использовании абстрактной заводской модели разделение структуры иерархии продукта очень важно.
Применимые сценарии
Абстрактные заводские паттерны могут использоваться, когда созданные объекты представляют собой серию взаимосвязанных или взаимозависимых семейств продуктов. Чтобы выразить это более ясно, в системе наследования, если существует несколько иерархических структур (то есть, существует несколько абстрактных классов), и существуют определенные корреляции или ограничения между классами реализации, разделенными на каждую иерархическую структуру, можно использовать абстрактную заводскую модель. Более уместно использовать несколько независимых заводов для создания продуктов, если в каждой иерархии нет ассоциаций или ограничений между классами реализации.
Суммировать
Будь то простая заводская модель, модель фабричного метода или абстрактная заводская модель, все они принадлежат к заводской модели и очень похожи по форме и характеристикам. Их конечная цель - отделить. При его использовании нам не нужно заботиться о том, является ли этот шаблон заводского метода или абстрактной заводской модели, потому что эволюция между ними часто трудно понять. Часто вы обнаружите, что когда появится новое требование, происходит небольшая модификация и добавляется новый метод, продукты в классе формируют семейство продуктов в разных иерархических структурах, он становится абстрактной заводской моделью; и для абстрактной заводской модели, когда метод уменьшается, чтобы сделать предоставленные продукты, которые больше не образуют семейство продуктов, он превращается в модель фабричного метода.
Поэтому при использовании заводского режима вам нужно только позаботиться о том, была ли достигнута цель уменьшения связи.