Sobes.tech
Middle+

Waarvoor dient het ontwerp patroon Builder?

sobes.tech AI

Antwoord van AI

Het Builder-patroon is nodig voor het stapsgewijs bouwen van complexe objecten. Het maakt het mogelijk om de logica van het maken van het object te scheiden van de presentatie ervan.

De belangrijkste voordelen van het gebruik ervan:

  • Scheiding van logica: Het proces van het maken van het object wordt ondergebracht in een aparte klasse (bouwer).
  • Flexibiliteit: Het stelt je in staat om objecten te maken met verschillende sets opties, met behulp van dezelfde bouwer.
  • Leesbaarheid van de code: De volgorde van het maken van het object wordt duidelijker.
  • Vermijden van "telescoop-constructors": Het voorkomt dat er veel overladen constructors met verschillende aantallen parameters ontstaan.

Voorbeeld:

<?php
// Representatie van een complex object - een 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 . ", Kleur: " . $this->color . ", GPS: " . ($this->gps ? "Ja" : "Nee") . "\n";
    }
}

// Builder-klasse voor Car
class CarBuilder {
    private $car;

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

    public function setEngine($engine) {
        $this->car->setEngine($engine);
        return $this; // Retourneert zichzelf voor keten van aanroepen
    }

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

// Gebruik van de builder
$builder = new CarBuilder();
$car1 = $builder->setEngine("V8")->setColor("Rood")->setGps(true)->build();
$car1->showDetails();

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

In dit voorbeeld is CarBuilder een bouwer die stap voor stap een Car-object bouwt. De klantcode communiceert alleen met de bouwer, zonder de interne details van de structuur van het object te kennen.