Що таке патерн Builder?
Builder (Будівельник) - це породжувальний патерн проєктування, який розділяє процес створення складного об'єкта на окремі кроки, дозволяючи зібрати його покроково і в різних варіаціях без зміни загального алгоритму.
1. Навіщо потрібен
Коли об'єкт має багато параметрів (обов'язкових і опціональних), звичайний конструктор стає незручним і нечитабельним. Builder вирішує цю проблему, дозволяючи створювати об'єкт поступово, вказуючи лише потрібні параметри, при цьому сам процес складання можна змінювати незалежно від структури об'єкта.
2. Основна ідея
Замість громіздкого конструктора:
new House("цегла", 2, true, false, "черепиця", "сад");використовується покрокове складання:
House house = new HouseBuilder()
.setWalls("цегла")
.setFloors(2)
.setGarage(true)
.build();3. Структура
- Builder - інтерфейс, що описує кроки побудови продукту.
- ConcreteBuilder - реалізує кроки і зберігає об'єкт, що збирається.
- Director (необов'язковий) - керує порядком складання (визначає рецепт).
- Product - підсумковий об'єкт, який потрібно побудувати.
4. Приклад (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);
}
}
}Використання:
House h = new House.Builder()
.setWalls("цегла")
.setRoof("черепиця")
.setGarage(true)
.build();5. Переваги
- Спрощує створення складних об'єктів.
- Дозволяє використовувати різні варіанти складання одного продукту.
- Робить код читабельним і гнучким.
- Усуває потребу в довгих конструкторах.
6. Недоліки
- Збільшує кількість класів.
- Складніший, ніж звичайний конструктор, якщо об'єкт простий.
Підсумок: Builder розділяє процеси конструювання і представлення об'єкта, дозволяючи покроково створювати складні структури з різними комбінаціями параметрів без перевантаження конструкторів і плутанини в коді.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.