Skip to main content

Що таке патерн Builder?

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 розділяє процеси конструювання і представлення об'єкта, дозволяючи покроково створювати складні структури з різними комбінаціями параметрів без перевантаження конструкторів і плутанини в коді.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.