Sobes.tech
Middle+

Wozu dient das Entwurfsmuster Builder?

sobes.tech KI

Antwort von AI

Der Builder ist notwendig, um komplexe Objekte Schritt für Schritt aufzubauen. Er ermöglicht es, die Logik der Objekterstellung von seiner Darstellung zu trennen.

Die wichtigsten Vorteile seiner Verwendung:

  • Trennung der Logik: Der Erstellungsprozess des Objekts wird in einer separaten Klasse (Builder) ausgelagert.
  • Flexibilität: Er ermöglicht die Erstellung von Objekten mit unterschiedlichen Optionen, wobei derselbe Builder verwendet wird.
  • Lesbarkeit des Codes: Die Abfolge der Objekterstellung wird klarer.
  • Vermeidung "teleskopischer Konstruktoren": Er verhindert die Entstehung vieler überladener Konstruktoren mit unterschiedlichen Parameterzahlen.

Beispiel:

<?php
// Repräsentation eines komplexen Objekts - eines Autos
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 . ", Farbe: " . $this->color . ", GPS: " . ($this->gps ? "Ja" : "Nein") . "\n";
    }
}

// Builder-Klasse für Car
class CarBuilder {
    private $car;

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

    public function setEngine($engine) {
        $this->car->setEngine($engine);
        return $this; // Rückgabe von sich selbst für Verkettung
    }

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

// Verwendung des Builders
$builder = new CarBuilder();
$car1 = $builder->setEngine("V8")->setColor("Rot")->setGps(true)->build();
$car1->showDetails();

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

In diesem Beispiel ist CarBuilder ein Builder, der schrittweise ein Car-Objekt erstellt. Der Client-Code interagiert nur mit dem Builder, ohne die internen Details der Objektstruktur zu kennen.