Sobes.tech
Middle

Дайте пример за реализиране на патърна 'Изградител' в C#.

sobes.tech AI

Отговор от AI

Моделът "Изградител" разделя процеса на изграждане на сложен обект от неговото представяне, така че същият процес на изграждане да може да създава различни представяния. Той се прилага, когато създаването на обекта изисква множество стъпки и конфигурации.

// Абстрактният изградител обявява интерфейс за създаване на части от обекта.
public abstract class Builder
{
    public abstract void BuildPartA();
    public abstract void BuildPartB();
    public abstract Product GetResult();
}

// Конкретният изградител реализира интерфейса Builder
// и конструира и сглобява частите на продукта.
public class ConcreteBuilder : Builder
{
    private Product _product = new Product();

    public override void BuildPartA()
    {
        _product.Add("PartA");
    }

    public override void BuildPartB()
    {
        _product.Add("PartB");
    }

    public override Product GetResult()
    {
        return _product;
    }
}

// Продуктът представлява сложен обект, който трябва да бъде построен.
public class Product
{
    private List<string> _parts = new List<string>();

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

    public void ListParts()
    {
        Console.WriteLine("Частите на продукта: " + string.Join(", ", _parts));
    }
}

// Директорът конструира обекта с помощта на интерфейса Builder.
public class Director
{
    public void Construct(Builder builder)
    {
        builder.BuildPartA();
        builder.BuildPartB();
    }
}

// Пример за използване
public class Program
{
    public static void Main(string[] args)
    {
        Director director = new Director();
        ConcreteBuilder builder = new ConcreteBuilder(); // Създаване на конкретен строител

        director.Construct(builder); // Директорът ръководи процеса на строителство

        Product result = builder.GetResult(); // Получаване на готовия продукт
        result.ListParts(); // Извеждане на частите на продукта
    }
}