Middle+
Kokia yra Builder dizaino šablono paskirtis?
sobes.tech AI
Atsakymas iš AI
Builder šablonas yra skirtas sudėtingų objektų žingsnis po žingsnio kūrimui. Jis leidžia atskirti objekto kūrimo logiką nuo jo pateikimo.
Pagrindiniai jo naudojimo privalumai:
- Logikos atskyrimas: Objekto kūrimo procesas išskirtas į atskirą klasę (statytoją).
- Lankstumas: leidžia kurti objektus su skirtingais parametrais, naudojant tą patį statytoją.
- Kodo skaitomumas: Objekto kūrimo procesas tampa aiškesnis.
- "Teleskopinių konstruktorių" vengimas: išvengia daugybės perkrautų konstruktorių su skirtingais parametrais.
Pavyzdys:
<?php
// Sudėtingo objekto pavyzdys - mašina
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 "Engine: " . $this->engine . ", Color: " . $this->color . ", GPS: " . ($this->gps ? "Yes" : "No") . "\n";
}
}
// Car statytojas
class CarBuilder {
private $car;
public function __construct() {
$this->car = new Car();
}
public function setEngine($engine) {
$this->car->setEngine($engine);
return $this; // grandininis metodas
}
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;
}
}
// Naudojimas
$builder = new CarBuilder();
$car1 = $builder->setEngine("V8")->setColor("Red")->setGps(true)->build();
$car1->showDetails();
$car2 = (new CarBuilder())->setEngine("V6")->setColor("Blue")->build(); // be GPS
$car2->showDetails();
Šiame pavyzdyje CarBuilder yra statytojas, kuris žingsnis po žingsnio kuria Car objektą. Klientų kodas dirba tik su statytoju, nesidomėdamas objekto vidine struktūra.