Паттерн проектирования Abstract Factory | OTUS
🔥 Начинаем BLACK FRIDAY!
Максимальная скидка -25% на всё. Успейте начать обучение по самой выгодной цене.
Выбрать курс

Курсы

Программирование
iOS Developer. Basic
-25%
Python Developer. Professional
-25%
Разработчик на Spring Framework
-25%
Golang Developer. Professional
-25%
Python Developer. Basic
-25%
iOS Developer. Professional
-25%
Node.js Developer
-25%
Unity Game Developer. Professional
-25%
React.js Developer
-25%
Android Developer. Professional
-25%
Software Architect
-25%
C++ Developer. Professional
-25%
Backend-разработчик на PHP Web-разработчик на Python Алгоритмы и структуры данных Framework Laravel PostgreSQL Team Lead Разработчик голосовых ассистентов и чат-ботов Архитектура и шаблоны проектирования Agile Project Manager Нереляционные базы данных Супер - интенсив по паттернам проектирования Супер-практикум по использованию и настройке GIT IoT-разработчик Подготовка к сертификации Oracle Java Programmer (OCAJP) Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Azure для разработчиков"
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK
-25%
DevOps практики и инструменты
-25%
Архитектор сетей
-25%
Инфраструктурная платформа на основе Kubernetes
-25%
Супер-интенсив «ELK»
-16%
Супер-интенсив «IaC Ansible»
-16%
Administrator Linux. Professional MS SQL Server Developer Безопасность Linux PostgreSQL Reverse-Engineering. Professional CI/CD VOIP инженер Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Administrator Linux.Basic Супер-интенсив "Tarantool"
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

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

Согласно Википедии, абстрактная фабрика является порождающим шаблоном проектирования, который предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов. Этот шаблон реализуется созданием абстрактного класса 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.

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

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

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

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

Автор
0 комментариев
Для комментирования необходимо авторизоваться
🎁 Максимальная скидка!
Черная пятница уже в OTUS! Скидка -25% на всё!