Middle+
Builder dizayn shabloni nima uchun kerak?
sobes.tech AI
AIdan javob
Builder pattern murakkab ob'ektlarni bosqichma-bosqich qurish uchun zarur. U ob'ektni yaratish logikasini uning tasviridan ajratishga imkon beradi.
Uning foydalanishining asosiy afzalliklari:
- Logikani ajratish: Ob'ektni yaratish jarayoni alohida sinfga (builder) o'tkaziladi.
- Moslashuvchanlik: Bir xil quruvchidan foydalanib, turli xil variantlar bilan ob'ektlar yaratish mumkin.
- Kod o'qilishi: Ob'ektni yaratish ketma-ketligi yanada aniqroq bo'ladi.
- "Teleskopik konstruktorlar" dan qochish: Parametrlar soni turlicha bo'lgan ko'plab ortiqcha konstruktorlarning paydo bo'lishini oldini oladi.
Misol:
<?php
// Murakkab ob'ekt - mashina
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 "Motor: " . $this->engine . ", Rangi: " . $this->color . ", GPS: " . ($this->gps ? "Ha" : "Yo'q") . "\n";
}
}
// Car uchun builder klass
class CarBuilder {
private $car;
public function __construct() {
$this->car = new Car();
}
public function setEngine($engine) {
$this->car->setEngine($engine);
return $this; // O'zini qaytaradi, zanjirli chaqiriqlar uchun
}
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;
}
}
// Builderdan foydalanish
$builder = new CarBuilder();
$car1 = $builder->setEngine("V8")->setColor("Qizil")->setGps(true)->build();
$car1->showDetails();
$car2 = (new CarBuilder())->setEngine("V6")->setColor("Ko'k")->build(); // GPSsiz
$car2->showDetails();
Ushbu misolda, CarBuilder - bosqichma-bosqich Car ob'ektini yaratadigan quruvchi. Mijoz kodi faqat quruvchiga murojaat qiladi, ob'ektning ichki tuzilishini bilmaydi.