El patrón Builder es un patrón de diseño que se utiliza para construir objetos complejos de manera descompuesta. Este patrón se divide en dos partes: el director y el constructeur.

El director es el encargado de definir el orden en que se construirán los objetos y el constructeur es el encargado de construir los objetos individuales.

Para implementar el patrón Builder en C#, debemos seguir los siguientes pasos:

Crear una interfaz IBuilder que defina los métodos necesarios para construir los objetos.

public interface IBuilder
{
    void BuildPartA();
    void BuildPartB();
    void BuildPartC();
    Product GetResult();
}

Crear las clases concretas que implementen la interfaz IBuilder y construyan los objetos.

public class ConcreteBuilder1 : IBuilder
{
    private Product _product = new Product();

    public void BuildPartA()
    {
        _product.Add("Part A");
    }

    public void BuildPartB()
    {
        _product.Add("Part B");
    }

    public void BuildPartC()
    {
        _product.Add("Part C");
    }

    public Product GetResult()
    {
        return _product;
    }
}

public class ConcreteBuilder2 : IBuilder
{
    private Product _product = new Product();

    public void BuildPartA()
    {
        _product.Add("Part X");
    }

    public void BuildPartB()
    {
        _product.Add("Part Y");
    }

    public void BuildPartC()
    {
        _product.Add("Part Z");
    }

    public Product GetResult()
    {
        return _product;
    }
}

Crear la clase director que utilice el objeto IBuilder para construir los objetos.

public class Director
{
    public void Construct(IBuilder builder)
    {
        builder.BuildPartA();
        builder.BuildPartB();
        builder.BuildPartC();
    }
}

Crear la clase Product que representa el objeto final construido.

public class Product
{
    private List<string> _parts = new List<string>();

    public void Add(string part)
    {
        _parts.Add(part);
    }

    public string ListParts()
    {
        string str = string.Empty;

        for (int i = 0; i < _parts.Count; i++)
        {
            str += _parts[i] + ", ";
        }

        str = str.Remove(str.Length - 2);

        return "Product parts: " + str + "\n";
    }
}

Por último, podemos utilizar el patrón Builder en una clase cliente:

class Client
{
    static void Main(string[] args)
{
Director director = new Director();
IBuilder builder1 = new ConcreteBuilder1();
IBuilder builder2 = new ConcreteBuilder2();

    director.Construct(builder1);
    Product product1 = builder1.GetResult();
    product1.ListParts();

    director.Construct(builder2);
    Product product2 = builder2.GetResult();
    product2.ListParts();

    Console.ReadKey();
}
}

En este ejemplo, tenemos dos objetos builder, ConcreteBuilder1 y ConcreteBuilder2, que implementan la interfaz IBuilder y construyen el objeto final de manera diferente. La clase Director utiliza el objeto IBuilder para construir los objetos y la clase Product es el objeto final construido. Al ejecutar el código, veremos que se construyen dos objetos diferentes utilizando el mismo proceso de construcción.
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence