Паттерн AbstractFactory (Абстрактная фабрика).

Паттерн AbstractFactory, также как и FactoryMethod является порождающим паттерном и служит для создания теперь уже семейств взаимосвязанных объектов. Для своей реализации использует фабричные методы. Ниже приведена диаграмма на языке UML, соответствующая данному паттерну:

pattern_abstract_factory

Интерфейс AbstractFactory реализуется конкретными класса ConcretteFactory. Каждая из фабрик создает объекты типов ProductA и ProductB, но конкретный их тип определяется фабрикой.

Например, мы моделируем сражение армий эльфов и гномов, которые состоят из лучников и обычных воинов. Создадим базовые классы Archer и Warrior. Также создадим их классы-наследники, реализующих специфические классы для каждой из армий. Это будут классы ElfArcher, ElfWarrior, DwarfArcher и DwarfWarrior.

Теперь создадим наши фабрики для обеих армий. Определим общий интерфейс ArmyFactory и классы ElfArmyFactory и DwarfArmyFactory, реализующих данный интерфейс. Каждая фабрика будет возвращать нам объект Archer (лучник) и Warrior (воин).

Данный интерфейс задает поведение для объектов-фабрик. Он содержит методы для создания новых лучников и воинов. Каких именно — это определит конкретная фабрика:

Теперь в коде для создания рекрутов армии эльфов мы пользуемся фабрикой ElfArmyFactory.  А для гномов — DwarfArmyFactory. Как только нам понадобится что-то изменить, мы просто используем другую фабрику — для того семейства объектов, которые нам нужны.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *