Middle+
Kāda ir Builder dizaina parauga mērķis?
sobes.tech AI
Atbilde no AI
Builder šablons ir paredzēts sarežģītu objektu pakāpeniskai būvniecībai. Tas ļauj atdalīt objekta izveides loģiku no tā attēlojuma.
Galvenās priekšrocības tā izmantošanā:
- Loģikas atdalīšana: Objekta izveides process ir atdalīts atsevišķā klasē (celtnieks).
- Elastība: ļauj izveidot objektus ar dažādiem parametriem, izmantojot vienu un to pašu celtnieku.
- Koda lasāmība: Objekta izveides process kļūst skaidrāks.
- "Teleskopisko konstruktoru" izvairīšanās: novērš daudzus pārkrautus konstruktorus ar dažādiem parametriem.
Piemērs:
<?php
// Sarežģīta objekta piemērs - mašīna
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";
}
}
// Mašīnas būvētājs
class CarBuilder {
private $car;
public function __construct() {
$this->car = new Car();
}
public function setEngine($engine) {
$this->car->setEngine($engine);
return $this; // ķēdes metode
}
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;
}
}
// Piemērs izmantošanai
$builder = new CarBuilder();
$car1 = $builder->setEngine("V8")->setColor("Red")->setGps(true)->build();
$car1->showDetails();
$car2 = (new CarBuilder())->setEngine("V6")->setColor("Blue")->build(); // bez GPS
$car2->showDetails();
Šajā piemērā CarBuilder ir būvētājs, kas pakāpeniski izveido Car objektu. Klients izmanto tikai būvētāju, nezinot objekta iekšējo struktūru.