HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Строитель представляет собой порождающий шаблон проектирования, с помощью которого можно создать составной объект. Этот паттерн предназначается для решения проблемы антипаттерна "Телескопический конструктор".</p>
1 <p>Строитель представляет собой порождающий шаблон проектирования, с помощью которого можно создать составной объект. Этот паттерн предназначается для решения проблемы антипаттерна "Телескопический конструктор".</p>
2 <p>Давайте представим, что вы зашли в McDonalds, где заказали конкретный продукт, тот же, БигМак, который вам приготовят без вопросов. Это пример шаблона "Простая фабрика". Но что, если логика создания включает в себя больше шагов? К примеру, вы желаете индивидуальный сэндвич в Subway. У вас в наличии ряд вариантов изготовления: какой хлеб, какие соусы, какой сыр? И здесь пригодится шаблон проектирования "Строитель".</p>
2 <p>Давайте представим, что вы зашли в McDonalds, где заказали конкретный продукт, тот же, БигМак, который вам приготовят без вопросов. Это пример шаблона "Простая фабрика". Но что, если логика создания включает в себя больше шагов? К примеру, вы желаете индивидуальный сэндвич в Subway. У вас в наличии ряд вариантов изготовления: какой хлеб, какие соусы, какой сыр? И здесь пригодится шаблон проектирования "Строитель".</p>
3 <p>Говоря проще, этот шаблон позволяет создавать разные виды объекта, избегая при этом засорения конструктора. Паттерн полезен, если возможно наличие нескольких видов объекта либо когда надо выполнить много шагов, которые связаны с его созданием.</p>
3 <p>Говоря проще, этот шаблон позволяет создавать разные виды объекта, избегая при этом засорения конструктора. Паттерн полезен, если возможно наличие нескольких видов объекта либо когда надо выполнить много шагов, которые связаны с его созданием.</p>
4 <p>Сделаем небольшое отступление и упомянем антипаттерн "Телескопический конструктор", о котором уже говорили:</p>
4 <p>Сделаем небольшое отступление и упомянем антипаттерн "Телескопический конструктор", о котором уже говорили:</p>
5 public function __construct($size, $cheese = true, $pepperoni = true, $tomato = false, $lettuce = true) { }<p>Как можно заметить, число параметров конструктора может резко увеличиться, в результате чего понимать расположение этих самых параметров станет весьма сложно. Вдобавок к этому, данный список параметров будет расти, если вы пожелаете добавить новые варианты. В результате мы и получим так называемый "Телескопический конструктор".</p>
5 public function __construct($size, $cheese = true, $pepperoni = true, $tomato = false, $lettuce = true) { }<p>Как можно заметить, число параметров конструктора может резко увеличиться, в результате чего понимать расположение этих самых параметров станет весьма сложно. Вдобавок к этому, данный список параметров будет расти, если вы пожелаете добавить новые варианты. В результате мы и получим так называемый "Телескопический конструктор".</p>
6 <p>Теперь рассмотрим это на примере кода. Шаблон "Строитель" - хорошая альтернатива. Итак, поначалу у нас есть Burger, который мы желаем создать:</p>
6 <p>Теперь рассмотрим это на примере кода. Шаблон "Строитель" - хорошая альтернатива. Итак, поначалу у нас есть Burger, который мы желаем создать:</p>
7 <p>Потом мы берём "Строителя":</p>
7 <p>Потом мы берём "Строителя":</p>
8 <p>А вот и пример использования:</p>
8 <p>А вот и пример использования:</p>
9 <h2>Когда применять шаблон "Строитель"?</h2>
9 <h2>Когда применять шаблон "Строитель"?</h2>
10 <p>Паттерн используют, когда, во-первых, может быть несколько видов объекта, а во-вторых, нам надо избежать "телескопического конструктора". Основное отличие этого шаблона от "фабрики" заключается в том, что последняя используется, если создание занимает один шаг, а Builder применяется при наличии множества шагов.</p>
10 <p>Паттерн используют, когда, во-первых, может быть несколько видов объекта, а во-вторых, нам надо избежать "телескопического конструктора". Основное отличие этого шаблона от "фабрики" заключается в том, что последняя используется, если создание занимает один шаг, а Builder применяется при наличии множества шагов.</p>
11 <p>Вот и всё, осталось привести пример использования этого паттерна на<a>Java</a>.</p>
11 <p>Вот и всё, осталось привести пример использования этого паттерна на<a>Java</a>.</p>
12 <p><em>По материалам статьи<a>"Design Patterns for Humans"</a>.</em></p>
12 <p><em>По материалам статьи<a>"Design Patterns for Humans"</a>.</em></p>
13  
13