Sobes.tech
Middle+

La ce folosește șablonul de proiectare Builder?

sobes.tech AI

Răspuns de la AI

Modelul Builder este necesar pentru construirea pas cu pas a obiectelor complexe. Acesta permite separarea logicii de creare a obiectului de reprezentarea sa.

Principalele avantaje ale utilizării sale:

  • Separarea logicii: Procesul de creare a obiectului este delegat unei clase separate (constructor).
  • Flexibilitate: Permite crearea de obiecte cu seturi diferite de opțiuni, folosind același constructor.
  • Citibilitatea codului: Secvența de creare a obiectului devine mai clară.
  • Evitarea "constructorilor telescopici": Previne apariția unui număr mare de constructori suprasaturați cu diferite numere de parametri.

Exemplu:

<?php
// Reprezentăm un obiect complex - o mașină
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 . ", Culoare: " . $this->color . ", GPS: " . ($this->gps ? "Da" : "Nu") . "\n";
    }
}

// Clasa builder pentru Car
class CarBuilder {
    private $car;

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

    public function setEngine($engine) {
        $this->car->setEngine($engine);
        return $this; // Returnează sine pentru lanț de apeluri
    }

    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;
    }
}

// Utilizarea builder-ului
$builder = new CarBuilder();
$car1 = $builder->setEngine("V8")->setColor("Roșu")->setGps(true)->build();
$car1->showDetails();

$car2 = (new CarBuilder())->setEngine("V6")->setColor("Albastru")->build(); // Fără GPS
$car2->showDetails();

În acest exemplu, CarBuilder este constructorul care construiește pas cu pas un obiect Car. Codul client interacționează doar cu constructorul, fără a cunoaște detaliile interne ale structurii obiectului.