Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке патерн Builder?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Builder (Будівельник)** - це породжувальний патерн проєктування, який розділяє процес створення складного об'єкта на окремі кроки, дозволяючи зібрати його покроково і в різних варіаціях без зміни загального алгоритму. **Ключове:** Builder розділяє процеси конструювання і представлення об'єкта, дозволяючи покроково створювати складні структури з різними комбінаціями параметрів без перевантаження конструкторів.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**Builder (Будівельник)** - це **породжувальний патерн проєктування**, який розділяє процес **створення складного об'єкта** на окремі кроки, дозволяючи **зібрати його покроково** і **в різних варіаціях** без зміни загального алгоритму. --- ### 1. **Навіщо потрібен** Коли об'єкт має багато параметрів (обов'язкових і опціональних), звичайний конструктор стає **незручним і нечитабельним**. Builder вирішує цю проблему, дозволяючи створювати об'єкт **поступово**, вказуючи лише потрібні параметри, при цьому сам процес складання можна змінювати незалежно від структури об'єкта. --- ### 2. **Основна ідея** Замість громіздкого конструктора: ```java new House("цегла", 2, true, false, "черепиця", "сад"); ``` використовується покрокове складання: ```java House house = new HouseBuilder() .setWalls("цегла") .setFloors(2) .setGarage(true) .build(); ``` --- ### 3. **Структура** 1. **Builder** - інтерфейс, що описує кроки побудови продукту. 2. **ConcreteBuilder** - реалізує кроки і зберігає об'єкт, що збирається. 3. **Director (необов'язковий)** - керує порядком складання (визначає рецепт). 4. **Product** - підсумковий об'єкт, який потрібно побудувати. --- ### 4. **Приклад (Java)** ```java class House { private String walls; private String roof; private boolean garage; // приватний конструктор private House(String walls, String roof, boolean garage) { this.walls = walls; this.roof = roof; this.garage = garage; } public static class Builder { private String walls; private String roof; private boolean garage; public Builder setWalls(String walls) { this.walls = walls; return this; } public Builder setRoof(String roof) { this.roof = roof; return this; } public Builder setGarage(boolean garage) { this.garage = garage; return this; } public House build() { return new House(walls, roof, garage); } } } ``` Використання: ```java House h = new House.Builder() .setWalls("цегла") .setRoof("черепиця") .setGarage(true) .build(); ``` --- ### 5. **Переваги** - Спрощує створення складних об'єктів. - Дозволяє використовувати різні варіанти складання одного продукту. - Робить код читабельним і гнучким. - Усуває потребу в довгих конструкторах. --- ### 6. **Недоліки** - Збільшує кількість класів. - Складніший, ніж звичайний конструктор, якщо об'єкт простий. --- **Підсумок:** Builder розділяє процеси **конструювання** і **представлення об'єкта**, дозволяючи покроково створювати складні структури з різними комбінаціями параметрів без перевантаження конструкторів і плутанини в коді.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.