Middle+
Ի՞նչ է անհրաժեշտ Builder դիզայնի նմուշը։
sobes.tech AI
Պատասխան AI-ից
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 "Engine: " . $this->engine . ", Color: " . $this->color . ", GPS: " . ($this->gps ? "Yes" : "No") . "\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;
}
}
// Куруучуну колдонуу
$builder = new CarBuilder();
$car1 = $builder->setEngine("V8")->setColor("Red")->setGps(true)->build();
$car1->showDetails();
$car2 = (new CarBuilder())->setEngine("V6")->setColor("Blue")->build(); // GPS жок
$car2->showDetails();
Бул мисалда CarBuilder куруучу болуп, ал объектти кадам-кадам түзөт. Кардар коду куруучу менен иштешет, объекттин ички түзүлүшүн билбестен.