Шаблон проектирования «Строитель» (Builder) | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Backend-разработчик на PHP
-9%
Алгоритмы и структуры данных
-9%
Team Lead
-6%
Архитектура и шаблоны проектирования Разработчик IoT
-13%
C# Developer. Professional
-9%
HTML/CSS
-11%
C# ASP.NET Core разработчик
-5%
Kotlin Backend Developer
-8%
iOS Developer. Professional
-8%
Java Developer. Professional JavaScript Developer. Professional Базы данных Android Developer. Professional Framework Laravel Cloud Solution Architecture Highload Architect Reverse-Engineering. Professional Vue.js разработчик Agile Project Manager VOIP инженер Scala-разработчик Супер-практикум по использованию и настройке GIT Symfony Framework Java Developer. Basic Unity Game Developer. Professional Супер-интенсив Azure
Инфраструктура
Экспресс-курс «IaC Ansible»
-10%
Administrator Linux.Basic
-10%
Мониторинг и логирование: Zabbix, Prometheus, ELK
-10%
Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
Administrator Linux. Professional
-6%
Дизайн сетей ЦОД
-13%
NoSQL Основы Windows Server MS SQL Server Developer Инфраструктурная платформа на основе Kubernetes Cloud Solution Architecture Highload Architect Разработчик голосовых ассистентов и чат-ботов VOIP инженер Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив "Tarantool"
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Шаблон проектирования «Строитель» (Builder)

Строитель представляет собой порождающий шаблон проектирования, с помощью которого можно создать составной объект. Этот паттерн предназначается для решения проблемы антипаттерна «Телескопический конструктор».

Давайте представим, что вы зашли в McDonalds, где заказали конкретный продукт, тот же, БигМак, который вам приготовят без вопросов. Это пример шаблона «Простая фабрика». Но что, если логика создания включает в себя больше шагов? К примеру, вы желаете индивидуальный сэндвич в Subway. У вас в наличии ряд вариантов изготовления: какой хлеб, какие соусы, какой сыр? И здесь пригодится шаблон проектирования «Строитель».

Говоря проще, этот шаблон позволяет создавать разные виды объекта, избегая при этом засорения конструктора. Паттерн полезен, если возможно наличие нескольких видов объекта либо когда надо выполнить много шагов, которые связаны с его созданием.

Сделаем небольшое отступление и упомянем антипаттерн «Телескопический конструктор», о котором уже говорили:

public function __construct($size, $cheese = true, $pepperoni = true, $tomato = false, $lettuce = true)
{
}

Как можно заметить, число параметров конструктора может резко увеличиться, в результате чего понимать расположение этих самых параметров станет весьма сложно. Вдобавок к этому, данный список параметров будет расти, если вы пожелаете добавить новые варианты. В результате мы и получим так называемый «Телескопический конструктор».

Теперь рассмотрим это на примере кода. Шаблон «Строитель» — хорошая альтернатива. Итак, поначалу у нас есть Burger, который мы желаем создать:

Screenshot_1-1801-761554.png

Потом мы берём «Строителя»:

Screenshot_2-1801-82d920.png

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

Screenshot_3-1801-c0b616.png

Когда применять шаблон «Строитель»?

Паттерн используют, когда, во-первых, может быть несколько видов объекта, а во-вторых, нам надо избежать «телескопического конструктора». Основное отличие этого шаблона от «фабрики» заключается в том, что последняя используется, если создание занимает один шаг, а Builder применяется при наличии множества шагов.

Вот и всё, осталось привести пример использования этого паттерна на Java.

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

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

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

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

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