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

Что это?

Шаблон проектирования «Абстрактная фабрика» - это простой способ избавиться от кода шаблона 🍽. Важное практическое правило 👍 - помнить, что Factory должен создавать объекты из одного семейства 👨‍👩‍👧‍👦. Что я имею в виду? Давайте посмотрим на панель управления Facebook. При бесконечной прокрутке ленты можно найти несколько типов элементов, вот несколько:

Несмотря на то, что они имеют разные размеры 📶, разные призывы к действию 🚀 и ​​в целом они выглядят по-разному 👫, это объекты одной группы типов.

Пример

Давайте посмотрим на наше представление данных элемента фида:

Как бы выглядела абстрактная фабрика? Я подготовил диаграмму, которая визуализирует этот пример:

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

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

Давайте посмотрим на код, который делает то же самое, но на примере Facebook Feed:

Код выглядит действительно чистым 🧤, не так ли?
Первый абзац определяет данные фида. Второй создает виджеты ленты. Третий отображает виджеты пользователю. В консоли ниже вы можете найти результаты, в альбомах фотографии отображаются вертикально, а в виджете покупок фотографии отображаются горизонтально со ссылкой, которая перенаправляет на веб-сайт магазина.

Виджеты:

Заводы:

Вы только посмотрите, насколько легко нам кажется расширение 🙉 и как легко это выглядит для клиента.

За и против

На этот раз начну с недостатков:

  • ☝️ Множество классов - существует столько заводских классов, сколько существует типов данных фида.
  • 🤷‍♀️ Я больше ничего не могу придумать!

А теперь о преимуществах!

  • ☝️ Отсутствие шаблонного кода - Abstract Factory действительно справляется со своей задачей. Метод Create является окончательным (в Kotlin отсутствует ключевое слово open, что означает, что его нельзя изменить). Он точно определяет поток, который должна выполнять эта фабрика, потомки обрабатывают только создание определенного макета и привязку к нему данных.
  • 🤘 Логическое разделение - размещение всего в отдельных классах делает эти классы меньше, чище и, по сути, легче читать 📖.
  • 🤟 Легче тестировать - в основном виджеты фреймворка модульного тестирования всегда сложно. Абстрагирование фабрики дает нам возможность тестировать саму фабрику, а виджеты можно тестировать в тестах End2End вместо модульных.

Вывод

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

Вам понравилась эта запись? Узнай больше в моем профиле 👨 И не забывай хлопать 👏