Sobes.tech
Middle+

A cosa serve il modello di progettazione Builder?

sobes.tech AI

Risposta dell'AI

Il pattern Builder è necessario per costruire oggetti complessi passo dopo passo. Permette di separare la logica di creazione dell'oggetto dalla sua rappresentazione.

Vantaggi chiave del suo utilizzo:

  • Separazione della logica: Il processo di creazione dell'oggetto viene delegato a una classe separata (costruttore).
  • Flessibilità: Permette di creare oggetti con diversi set di opzioni, usando lo stesso costruttore.
  • Leggibilità del codice: La sequenza di creazione dell'oggetto diventa più chiara.
  • Evitare "costruttori telescopici": Previene la creazione di molti costruttori sovraccarichi con diversi numeri di parametri.

Esempio:

<?php
// Rappresentiamo un oggetto complesso - una macchina
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 "Motore: " . $this->engine . ", Colore: " . $this->color . ", GPS: " . ($this->gps ? "Sì" : "No") . "\n";
    }
}

// Classe builder per Car
class CarBuilder {
    private $car;

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

    public function setEngine($engine) {
        $this->car->setEngine($engine);
        return $this; // Ritorna se stesso per la catena di chiamate
    }

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

// Utilizzo del builder
$builder = new CarBuilder();
$car1 = $builder->setEngine("V8")->setColor("Rosso")->setGps(true)->build();
$car1->showDetails();

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

In questo esempio, CarBuilder è il costruttore che crea passo dopo passo un oggetto Car. Il codice cliente interagisce solo con il costruttore, senza conoscere i dettagli interni della struttura dell'oggetto.