Найти в Дзене
AniNice

Паттерн: Абстрактная фабрика

Суть паттерна Абстрактная фабрика - это порождающий паттерн проектирования, который позволяет создавать семейства связанных объектов, не привязываясь к конкретным классам создаваемых объектов. Для начала паттерн Абстрактная фабрика, предлагает выделить общие интерфейсы для отдельных продуктов, составляющих семейства. Далее вы создаете абстрактную фабрику - общий интерфейс, который содержит методы создания всех продуктов семейства. Эти операции должны возвращать абстрактные типы продуктов. Клиентский код должен работать как с фабриками, так и с продуктами только через их общие интерфейсы. Это позволит подавать в ваши классы любой тип фабрики и производить любые продукты, ничего не ломая. Применимость Когда бизнес-логика программы должна работать с разными видами связанных друг с другом продуктов, не завися от конкретных классов продуктов Абстрактная фабрика скрывает от клиентского кода подробности того, как и какие конкретно объекты будут созданы. Но при этом клиентский код может работа
Оглавление

Суть паттерна

Абстрактная фабрика - это порождающий паттерн проектирования, который позволяет создавать семейства связанных объектов, не привязываясь к конкретным классам создаваемых объектов.

Для начала паттерн Абстрактная фабрика, предлагает выделить общие интерфейсы для отдельных продуктов, составляющих семейства. Далее вы создаете абстрактную фабрику - общий интерфейс, который содержит методы создания всех продуктов семейства. Эти операции должны возвращать абстрактные типы продуктов.

Клиентский код должен работать как с фабриками, так и с продуктами только через их общие интерфейсы. Это позволит подавать в ваши классы любой тип фабрики и производить любые продукты, ничего не ломая.

Применимость

Когда бизнес-логика программы должна работать с разными видами связанных друг с другом продуктов, не завися от конкретных классов продуктов

Абстрактная фабрика скрывает от клиентского кода подробности того, как и какие конкретно объекты будут созданы. Но при этом клиентский код может работать со всеми типами создаваемых продуктов, поскольку их общий интерфейс был заранее определен.

Когда программе уже используется Фабричный метод, но очередные изменения предполагают введение новых типов продуктов

В хорошей программе каждый класс отвечает только за одну вещь. Если класс имеет слишком много фабричных методов, они способны затуманить его основную функцию. Поэтому имеет смысл вывести всю логику создания продуктов в отдельную иерархию классов, применив абстрактную фабрику.

Шаги реализации

  1. Создайте таблицу соотношений типов продуктов к вариациям семеств продуктов
  2. Сведите все вариации продуктов к общим интерфейсам
  3. Определите интерфейс абстрактной фабрики. Он должен иметь фабричные методы для создания каждого из типов продуктов
  4. Создайте классы конкретных фабрик, реализовав интерфейс абстрактной фабрики. Этих классов должно быть столько же, сколько и вариаций семейств продуктов.
  5. Измените код инициализации программы так, чтобы она создавала определенную фабрику и передавала ее в клиентский код.
  6. Замените в клиентском коде участки создания продуктов через конструктор вызовами соответствующих методов фабрики.