Sobes.tech
Middle+

Builder tasarımı şablonu ne işe yarar?

sobes.tech yapay zeka

AI'dan gelen yanıt

Builder deseni, karmaşık nesneleri adım adım oluşturmak için gereklidir. Nesne oluşturma mantığını, temsilinden ayırmaya olanak tanır.

Kullanımının temel avantajları:

  • Mantığın ayrılması: Nesne oluşturma süreci, ayrı bir sınıfa (builder) taşınmıştır.
  • Esneklik: Aynı yapıcı kullanılarak farklı seçeneklerle nesneler oluşturulabilir.
  • Kod okunabilirliği: Nesne oluşturma sırası daha belirgin hale gelir.
  • "Teleskopik yapıcılar" den kaçınma: Farklı parametre sayısına sahip çok sayıda aşırı yüklenmiş yapıcıların oluşmasını engeller.

Örnek:

<?php
// Karmaşık bir nesne - bir araba
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 . ", Renk: " . $this->color . ", GPS: " . ($this->gps ? "Evet" : "Hayır") . "\n";
    }
}

// Car için yapıcı sınıf
class CarBuilder {
    private $car;

    public function __construct() {
        $this->car = new Car();
    }

    public function setEngine($engine) {
        $this->car->setEngine($engine);
        return $this; // Zincirleme çağrılar için kendisini döner
    }

    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 kullanımı
$builder = new CarBuilder();
$car1 = $builder->setEngine("V8")->setColor("Kırmızı")->setGps(true)->build();
$car1->showDetails();

$car2 = (new CarBuilder())->setEngine("V6")->setColor("Mavi")->build(); // GPS olmadan
$car2->showDetails();

Bu örnekte, CarBuilder, adım adım bir Car nesnesi oluşturan yapıcıdır. Müşteri kodu sadece yapıcıyla etkileşir, nesnenin iç yapısının detaylarını bilmez.