Sobes.tech
Middle

Qu'est-ce que le patron de conception Builder?

sobes.tech IA

Réponse de l'IA

Le patron de conception Builder est destiné à créer des objets complexes étape par étape. Il sépare le processus de construction de l'objet de sa représentation, permettant d'utiliser le même processus de construction pour créer différentes représentations.

Composants principaux :

  • Builder : Interface ou classe abstraite définissant les méthodes pour créer des parties de l'objet.
  • ConcreteBuilder : Implémentation de l'interface Builder, qui construit et assemble les parties de l'objet.
  • Director : Définit l'ordre dans lequel les méthodes de ConcreteBuilder sont appelées pour créer l'objet. Composant optionnel.
  • Product : Objet complexe créé en utilisant le patron Builder.

Avantages :

  • Permet de créer des objets complexes étape par étape.
  • Offre un meilleur contrôle sur le processus de construction.
  • Permet de changer la représentation interne de l'objet.
  • Facilite la création de différentes variations du même objet.

Exemple :

// Produit
public class Car
{
    public string Engine { get; set; }
    public string Color { get; set; }
    public int Wheels { get; set; }

    public void Display()
    {
        Console.WriteLine($"Voiture avec moteur : {Engine}, couleur : {Color}, roues : {Wheels}");
    }
}

// Builder
public interface ICarBuilder
{
    void BuildEngine();
    void BuildColor();
    void BuildWheels();
    Car GetResult();
}

// ConcreteBuilder
public class SportsCarBuilder : ICarBuilder
{
    private Car _car = new Car();

    public void BuildEngine()
    {
        _car.Engine = "V8";
    }

    public void BuildColor()
    {
        _car.Color = "Rouge";
    }

    public void BuildWheels()
    {
        _car.Wheels = 4;
    }

    public Car GetResult()
    {
        return _car;
    }
}

// Director
public class CarDirector
{
    private ICarBuilder _builder;

    public CarDirector(ICarBuilder builder)
    {
        _builder = builder;
    }

    public void Construct()
    {
        _builder.BuildEngine();
        _builder.BuildColor();
        _builder.BuildWheels();
    }
}

// Utilisation
public class Program
{
    public static void Main(string[] args)
    {
        ICarBuilder builder = new SportsCarBuilder();
        CarDirector director = new CarDirector(builder);

        director.Construct();
        Car sportsCar = builder.GetResult();
        sportsCar.Display();
    }
}