Sobes.tech
Middle+

À quoi sert le modèle de conception Builder?

sobes.tech IA

Réponse de l'IA

Le modèle Builder est nécessaire pour construire étape par étape des objets complexes. Il permet de séparer la logique de création de l'objet de sa représentation.

Les avantages clés de son utilisation :

  • Séparation de la logique : Le processus de création de l'objet est délégué à une classe séparée (le constructeur).
  • Flexibilité : Permet de créer des objets avec différents ensembles d'options, en utilisant le même constructeur.
  • Lisibilité du code : La séquence de création de l'objet devient plus claire.
  • Éviter les "constructeurs télescopiques" : Empêche l'apparition de nombreux constructeurs surchargés avec différents nombres de paramètres.

Exemple :

<?php
// Représentation d'un objet complexe - une voiture
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 "Moteur : " . $this->engine . ", Couleur : " . $this->color . ", GPS : " . ($this->gps ? "Oui" : "Non") . "\n";
    }
}

// Classe constructeur pour Car
class CarBuilder {
    private $car;

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

    public function setEngine($engine) {
        $this->car->setEngine($engine);
        return $this; // Retourne lui-même pour la chaîne d'appels
    }

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

// Utilisation du constructeur
$builder = new CarBuilder();
$car1 = $builder->setEngine("V8")->setColor("Rouge")->setGps(true)->build();
$car1->showDetails();

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

Dans cet exemple, CarBuilder est le constructeur qui construit étape par étape un objet Car. Le code client n'interagit qu'avec le constructeur, sans connaître les détails internes de la structure de l'objet.