Паттерн проектирования Abstract Factory | OTUS

Паттерн проектирования Abstract Factory

Arch_headline_970x70-1801-410a68.png

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

Да, определение весьма ёмкое, но сложное для понимания. Упростим ситуацию. Давайте представим, что у нас есть коттедж, и нам нужно заказать двери, при этом разные. Деревянную дверь мы закажем в одном магазине, железную — в другом, пластиковую — в третьем. Для изготовления этих дверей понадобятся разные специалисты: столяр — для первой, электрогазосварщик — для второй и т. д. То есть налицо зависимость между дверьми.

Говоря простыми словами, Abstract Factory — это фабрика фабрик, то есть фабрика, группирующая индивидуальные, но при этом связанные/зависимые фабрики, не указывая их конкретных классов.

Напишем соответствующий код на PHP 7. Поначалу у нас присутствует интерфейс Door и несколько его реализаций:

1-1801-5bf24f.png

Также для каждого типа дверей у нас есть специалисты DoorFittingExpert :

2-1801-de6aaf.png

Итак, теперь в нашем распоряжении DoorFactory, которая позволит создать целое семейство связанных объектов. Та же фабрика деревянных дверей предоставит и деревянную дверь, и соответствующего эксперта. То же самое и для железных дверей:

3-1801-694e85.png

А теперь рассмотрим пример использования:

4-1801-405ce0.png

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

Таким образом, Abstract Factory используется в тех случаях, когда у нас есть взаимосвязанные зависимости с не самой простой логикой создания. Если интересует, можете посмотреть соответствующие примеры реализации на Java.

Arch_headline_970x70-1801-410a68.png

По материалам статьи «Design Patterns for Humans».

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто