Sobes.tech
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.