Sobes.tech
Middle
132
questionbank

Приведите пример реализации паттерна проектирования 'Строитель' в C#.

Ответ от нейросети

sobes.tech 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("Product parts: " + 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(); // Выводим части продукта
    }
}

Основные компоненты:

  • Builder: Абстрактный интерфейс для создания частей конечного продукта.
  • ConcreteBuilder: Конкретная реализация Builder, которая строит и собирает части продукта.
  • Director: Класс, который использует Builder для пошагового конструирования объекта, не зная его конкретного типа.
  • Product: Сложный объект, который строится.

Этот пример демонстрирует, как Director использует ConcreteBuilder для создания Product шаг за шагом, отделяя процесс конструирования от его представления.