Sobes.tech
Middle+

¿Para qué sirve el patrón de diseño Builder?

sobes.tech AI

Respuesta de la IA

El patrón Builder es necesario para construir objetos complejos paso a paso. Permite separar la lógica de creación del objeto de su representación.

Las ventajas clave de su uso:

  • Separación de lógica: El proceso de creación del objeto se realiza en una clase separada (constructor).
  • Flexibilidad: Permite crear objetos con diferentes conjuntos de opciones, usando el mismo constructor.
  • Legibilidad del código: La secuencia de creación del objeto se vuelve más clara.
  • Evitar "constructores telescópicos": Previene la aparición de muchos constructores sobrecargados con diferentes números de parámetros.

Ejemplo:

<?php
// Representamos un objeto complejo - un coche
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 . ", Color: " . $this->color . ", GPS: " . ($this->gps ? "Sí" : "No") . "\n";
    }
}

// Clase constructora para Car
class CarBuilder {
    private $car;

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

    public function setEngine($engine) {
        $this->car->setEngine($engine);
        return $this; // Devolver a sí mismo para encadenar llamadas
    }

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

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

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

En este ejemplo, CarBuilder es el constructor que crea paso a paso un objeto Car. El código cliente solo interactúa con el constructor, sin conocer los detalles internos de la estructura del objeto.