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.
รูปแบบ Builder คือรูปแบบการออกแบบที่ใช้ในการสร้างวัตถุที่ซับซ้อนในลักษณะสลายตัว รูปแบบนี้แบ่งออกเป็นสองส่วน: ผู้อำนวยการและผู้สร้าง ผู้อำนวยการมีหน้าที่กำหนดลำดับในการสร้างวัตถุ และผู้ก่อสร้างมีหน้าที่รับผิดชอบในการสร้างวัตถุแต่ละชิ้น ในการใช้รูปแบบ Builder ใน C# เราต้องทำตามขั้นตอนต่อไปนี้: สร้างอินเทอร์เฟซ IBuilder ที่กำหนดวิธีการที่จำเป็นในการสร้างวัตถุ IBuilder อินเทอร์เฟซสาธารณะ { เป็นโมฆะ BuildPartA (); เป็นโมฆะ BuildPartB(); เป็นโมฆะ BuildPartC(); สินค้าGetResult(); } สร้างคลาสที่เป็นรูปธรรมที่ใช้อินเทอร์เฟซ IBuilder และสร้างอ็อบเจ็กต์ คลาสสาธารณะ ConcreteBuilder1 : IBuilder { ผลิตภัณฑ์ส่วนตัว _product = ผลิตภัณฑ์ใหม่ (); โมฆะสาธารณะ BuildPartA() { _product.Add("ส่วน A"); } โมฆะสาธารณะ BuildPartB() { _product.Add("ส่วน B"); } โมฆะสาธารณะ BuildPartC() { _product.Add("ส่วน C"); } } GetResult ผลิตภัณฑ์สาธารณะ () { return _product; } } คลาสสาธารณะ ConcreteBuilder2 : IBuilder { ผลิตภัณฑ์ส่วนตัว _product = ผลิตภัณฑ์ใหม่ (); โมฆะสาธารณะ BuildPartA() { _product.Add("ส่วนที่ X"); } โมฆะสาธารณะ BuildPartB() { _product.Add("ส่วน Y"); } } โมฆะสาธารณะ BuildPartC() { _product.Add("ส่วน Z"); } } GetResult ผลิตภัณฑ์สาธารณะ () { return _product; } } สร้างคลาส Director ที่ใช้วัตถุ IBuilder เพื่อสร้างวัตถุ ผู้อำนวยการคลาสสาธารณะ { โมฆะสาธารณะสร้าง (ตัวสร้าง IBuilder) { builder.BuildPartA (); builder.BuildPartB(); builder.BuildPartC(); } } สร้างคลาสผลิตภัณฑ์ที่แสดงถึงวัตถุที่สร้างขึ้นขั้นสุดท้าย ผลิตภัณฑ์คลาสสาธารณะ { รายการส่วนตัว <string> _parts = รายการใหม่ <string>(); โมฆะสาธารณะเพิ่ม (ส่วนสตริง) { _parts.Add (ส่วนหนึ่ง); } สตริงสาธารณะ ListParts() { string str = string.Empty; สำหรับ (int i = 0; i < _parts.Count; i++) { str += _parts[i] + ", "; } str = str.Remove(str.ความยาว - 2); กลับ "ชิ้นส่วนผลิตภัณฑ์: " + str + "\n"; } } ในที่สุด เราสามารถใช้รูปแบบ Builder ในคลาสไคลเอนต์: class Client { static void Main(string[] args) { Director Director = new Director(); IBuilder builder1 = ConcreteBuilder1 ใหม่(); IBuilder builder2 = ConcreteBuilder2 ใหม่(); ผู้อำนวยการสร้าง (ผู้สร้าง 1); สินค้า product1 = builder1.GetResult(); product1.ListParts(); ผู้อำนวยการสร้าง (ผู้สร้าง 2); สินค้า product2 = builder2.GetResult(); product2.ListParts(); คอนโซล ReadKey(); } } ในตัวอย่างนี้ เรามีอ็อบเจ็กต์ตัวสร้างสองตัวคือ ConcreteBuilder1 และ ConcreteBuilder2 ซึ่งใช้อินเทอร์เฟซ IBuilder และสร้างอ็อบเจ็กต์สุดท้ายแตกต่างกัน คลาส Director ใช้วัตถุ IBuilder เพื่อสร้างวัตถุและคลาส Product เป็นวัตถุที่สร้างขึ้นขั้นสุดท้าย โดยการรันโค้ด เราจะเห็นว่าวัตถุสองชิ้นที่แตกต่างกันถูกสร้างขึ้นโดยใช้กระบวนการสร้างเดียวกัน
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence