ビルダーパターンは、複雑なオブジェクトの構造を表現から分離するために使用される設計パターンであり、同じ構造プロセスが異なる表現を作成できるようにします。

このパターンは、多くのパラメーターを持つ複雑なクラスがある状況で有用であり、議論の長いリストを持つビルダーを避けたいと思うことがあります。

C＃の実装の例は次のとおりです。

//抽象ビルダークラス
抽象クラスのピザビルダー
{
    保護されたピザピザ。

    パブリックピザgetpizza（）
    {
        ピザを返します。
    }

    public void createNewpiz shodproduct（）
    {
        Pizza = new Pizza（）;
    }

    パブリックアブストラクトvoid setdough（）;
    public abstract void setSauce（）;
    public abstract void setopping（）;
}

// ConcreteBuilderクラス
クラスHawaiianPizzabuilder：Pizzabuilder
{
    パブリックオーバーライドvoid setdough（）
    {
        pizza.dough = "Cross";
    }

    パブリックオーバーライドvoid setSauce（）
    {
        pizza.sauce = "mild";
    }

    パブリックオーバーライドvoid setopping（）
    {
        pizza.topping = "ham+pineapple";
    }
}

//製品クラス
クラスピザ
{
    private string dough = "";
    プライベートストリングソース= "";
    プライベート文字列トッピング= "";

    パブリックストリング生地
    {
        {return dough;}
        set {dough = value;}
    }

    パブリックストリングソース
    {
        {return Sauce;}
        set {Sauce = value;}
    }

    パブリック文字列のトッピング
    {
        {return toping;}
        set {topping = value;}
    }
}

//ディレクタークラス
クラスウェイター
{
    プライベートピザビルダーピザビルダー。

    public void setpizzabuilder（Pizzabuilder PB）
    {
        pizabuilder = pb;
    }

    パブリックピザgetpizza（）
    {
        pizzabuilder.getpizzaを返します（）;
    }

    public void constructpizza（）
    {
        pizzabuilder.createNewpizproduct（）;
        pizzabuilder.setDough（）;
        pizzabuilder.setsauce（）;
        pizzabuilder.settopping（）;
    }
}

//クライアントクラス
クラスのピッツォレトア
{
    static void main（string [] args）
    {
        ウェイターウェイター= new Waiter（）;
        Pizzabuilder hawaiianpizzabuilder = new Hawaiianpizzabuilder（）;

        waiter.setpizzabuilder（hawaiianpizzabuilder）;
        waiter.constructpizza（）;

        Pizza Pizza = waiter.getpizza（）;
    }
}


この例では、ディレクター（ウェイター）は、建設クラス（ピザビルダー）と製品クラス（ピザ）の間の仲介者として機能します。建設クラス（HawaiianPizzabuilder）がピザと監督の建設方法を定義します
El patrón Builder es un patrón de diseño que se utiliza para separar la construcción de un objeto complejo de su representación, de manera que el mismo proceso de construcción pueda crear diferentes representaciones.

Este patrón es útil en situaciones en las que hay una clase compleja con muchos parámetros, y se quiere evitar un constructor con una larga lista de argumentos.

Aquí hay un ejemplo de implementación en C#:

// La clase abstracta Builder
abstract class PizzaBuilder
{
    protected Pizza pizza;

    public Pizza GetPizza()
    {
        return pizza;
    }

    public void CreateNewPizzaProduct()
    {
        pizza = new Pizza();
    }

    public abstract void SetDough();
    public abstract void SetSauce();
    public abstract void SetTopping();
}

// La clase ConcreteBuilder
class HawaiianPizzaBuilder : PizzaBuilder
{
    public override void SetDough()
    {
        pizza.Dough = "cross";
    }

    public override void SetSauce()
    {
        pizza.Sauce = "mild";
    }

    public override void SetTopping()
    {
        pizza.Topping = "ham+pineapple";
    }
}

// La clase Product
class Pizza
{
    private string dough = "";
    private string sauce = "";
    private string topping = "";

    public string Dough
    {
        get { return dough; }
        set { dough = value; }
    }

    public string Sauce
    {
        get { return sauce; }
        set { sauce = value; }
    }

    public string Topping
    {
        get { return topping; }
        set { topping = value; }
    }
}

// La clase Director
class Waiter
{
    private PizzaBuilder pizzaBuilder;

    public void SetPizzaBuilder(PizzaBuilder pb)
    {
        pizzaBuilder = pb;
    }

    public Pizza GetPizza()
    {
        return pizzaBuilder.GetPizza();
    }

    public void ConstructPizza()
    {
        pizzaBuilder.CreateNewPizzaProduct();
        pizzaBuilder.SetDough();
        pizzaBuilder.SetSauce();
        pizzaBuilder.SetTopping();
    }
}

// La clase Cliente
class PizzaStore
{
    static void Main(string[] args)
    {
        Waiter waiter = new Waiter();
        PizzaBuilder hawaiianPizzaBuilder = new HawaiianPizzaBuilder();

        waiter.SetPizzaBuilder(hawaiianPizzaBuilder);
        waiter.ConstructPizza();

        Pizza pizza = waiter.GetPizza();
    }
}


En este ejemplo, el director (Waiter) actúa como intermediario entre la clase de construcción (PizzaBuilder) y la clase de producto (Pizza). La clase de construcción (HawaiianPizzaBuilder) define cómo se construirá la pizza y el director