Middle+
Зашто је потребан шаблон за дизајн Builder?
sobes.tech АИ
Одговор од АИ
Шаблон Builder је неопходан за појасно грађење сложених објеката корак по корак. Он омогућава раздвајање логике креирања објекта од његове презентације.
Кључне предности коришћења:
- Одвајање логике: Процес креирања објекта се преноси у посебну класу (грађевинар).
- Флексибилност: Омогућава креирање објеката са различитим скуповима опција, користећи исти грађевинар.
- Јасноћа кода: Последователност креирања објекта постаје јаснија.
- Избегавање "телескопских конструктора": Превенција појаве великог броја пренатоварених конструктора са различитим бројевима параметара.
Пример:
<?php
// Представљање сложеног објекта - аутомобила
class Car {
private $engine;
private $color;
private $gps;
public function setEngine($engine) {
$this->engine = $engine;
}
public function setColor($color) {
$this->color = $color;
}
public function setGps($gps) {
$this->gps = $gps;
}
public function showDetails() {
echo "Мотор: " . $this->engine . ", Боја: " . $this->color . ", GPS: " . ($this->gps ? "Да" : "Не") . "\n";
}
}
// Класа грађевинар за Car
class CarBuilder {
private $car;
public function __construct() {
$this->car = new Car();
}
public function setEngine($engine) {
$this->car->setEngine($engine);
return $this; // Враћа себе за ланац позива
}
public function setColor($color) {
$this->car->setColor($color);
return $this;
}
public function setGps($gps) {
$this->car->setGps($gps);
return $this;
}
public function build() {
return $this->car;
}
}
// Коришћење грађевинaра
$builder = new CarBuilder();
$car1 = $builder->setEngine("V8")->setColor("Црвена")->setGps(true)->build();
$car1->showDetails();
$car2 = (new CarBuilder())->setEngine("V6")->setColor("Плава")->build(); // Без GPS
$car2->showDetails();
У овом примеру, CarBuilder је грађевинар који корак по корак гради објекат Car. Клијентски код комуницира само са грађевинаром, не знајући детаље унутрашње структуре објекта.