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 шаг за шагом, отделяя процесс конструирования от его представления.