Sobes.tech
Middle
120
questionbank

Что такое паттерн проектирования Builder?

Answer from AI

sobes.tech AI

Паттерн проектирования Builder предназначен для создания сложных объектов пошагово. Он отделяет процесс конструирования объекта от его представления, позволяя использовать один и тот же процесс конструирования для создания различных представлений.

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

  • Builder: Интерфейс или абстрактный класс, определяющий методы для создания частей объекта.
  • ConcreteBuilder: Реализация интерфейса Builder, которая конструирует и собирает части объекта.
  • Director: Определяет порядок вызова методов ConcreteBuilder для создания объекта. Optional component.
  • Product: Сложный объект, который создается с использованием паттерна Builder.

Преимущества:

  • Позволяет создавать сложные объекты пошагово.
  • Обеспечивает лучший контроль над процессом построения объекта.
  • Позволяет изменять внутреннее представление объекта.
  • Упрощает создание различных вариаций одного и того же объекта.

Пример:

// Product
public class Car
{
    public string Engine { get; set; }
    public string Color { get; set; }
    public int Wheels { get; set; }

    public void Display()
    {
        Console.WriteLine($"Car with Engine: {Engine}, Color: {Color}, Wheels: {Wheels}");
    }
}

// Builder
public interface ICarBuilder
{
    void BuildEngine();
    void BuildColor();
    void BuildWheels();
    Car GetResult();
}

// ConcreteBuilder
public class SportsCarBuilder : ICarBuilder
{
    private Car _car = new Car();

    public void BuildEngine()
    {
        _car.Engine = "V8";
    }

    public void BuildColor()
    {
        _car.Color = "Red";
    }

    public void BuildWheels()
    {
        _car.Wheels = 4;
    }

    public Car GetResult()
    {
        return _car;
    }
}

// Director
public class CarDirector
{
    private ICarBuilder _builder;

    public CarDirector(ICarBuilder builder)
    {
        _builder = builder;
    }

    public void Construct()
    {
        _builder.BuildEngine();
        _builder.BuildColor();
        _builder.BuildWheels();
    }
}

// Usage
public class Program
{
    public static void Main(string[] args)
    {
        ICarBuilder builder = new SportsCarBuilder();
        CarDirector director = new CarDirector(builder);

        director.Construct();
        Car sportsCar = builder.GetResult();
        sportsCar.Display();
    }
}