Sobes.tech
Middle+

Na čo je užitočný vzor Builder?

sobes.tech AI

Odpoveď od AI

Vzor Builder je potrebný pre krokové zostavenie zložitých objektov. Umožňuje oddeliť logiku tvorby objektu od jeho prezentácie.

Kľúčové výhody jeho použitia:

  • Oddelenie logiky: Proces tvorby objektu je presunutý do samostatnej triedy (staviteľ).
  • Flexibilita: Umožňuje vytváranie objektov s rôznymi sadami možností pomocou toho istého staviteľa.
  • Čitateľnosť kódu: Sekvencia tvorby objektu je jasnejšia.
  • Vyvarovanie sa "teleskopických konštruktorov": Zabraňuje vzniku veľkého množstva preťažených konštruktorov s rôznym počtom parametrov.

Príklad:

<?php
// Predstavujeme zložitý objekt - auto
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 . ", Farba: " . $this->color . ", GPS: " . ($this->gps ? "Áno" : "Nie") . "\n";
    }
}

// Trieda builder pre Car
class CarBuilder {
    private $car;

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

    public function setEngine($engine) {
        $this->car->setEngine($engine);
        return $this; // Vracia sám seba pre reťazenie volaní
    }

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

// Použitie buildera
$builder = new CarBuilder();
$car1 = $builder->setEngine("V8")->setColor("Červená")->setGps(true)->build();
$car1->showDetails();

$car2 = (new CarBuilder())->setEngine("V6")->setColor("Modrá")->build(); // Bez GPS
$car2->showDetails();

V tomto príklade je CarBuilder staviteľ, ktorý krok za krokom vytvára objekt Car. Klientska kód komunikuje iba so staviteľom, nepozná detaily vnútornej štruktúry objektu.