Sobes.tech
Middle

Šta je obrazac dizajna Builder?

sobes.tech АИ

Одговор од АИ

Шаблон дизајна Builder намењен је за креирање сложених објеката корак по корак. Он одваја процес конструисања објекта од његовог приказа, омогућавајући коришћење истог процеса конструисања за креирање различитих приказа.

Главне компоненте:

  • Builder: Интерфејс или апстрактна класа која дефинише методе за креирање делова објекта.
  • ConcreteBuilder: Реализација интерфејса Builder која конструише и саставља делове објекта.
  • Director: Одређује редослед позива метода ConcreteBuilder за креирање објекта. Опциони компонент.
  • 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($"Автомобил са мотором: {Engine}, бојом: {Color}, број погонских точкова: {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();
    }
}