Sobes.tech
Middle

Kas yra Builder dizaino šablonas?

sobes.tech AI

Atsakymas iš AI

Dizaino šablonas Builder skirtas sudėtingų objektų kūrimui žingsnis po žingsnio. Jis atskiria objekto konstravimo procesą nuo jo vaizdavimo, leidžiant naudoti tą patį konstravimo procesą įvairių vaizdų kūrimui.

Pagrindinės sudedamosios dalys:

  • Builder: Sąsaja arba abstrakti klasė, apibrėžianti metodus objekto dalių kūrimui.
  • ConcreteBuilder: Builder sąsajos įgyvendinimas, kuris kuria ir surenka objekto dalis.
  • Director: Nustato ConcreteBuilder metodų iškvietimo tvarką objekto kūrimui. Pasirinktinė sudedamoji dalis.
  • Product: Sudėtingas objektas, sukurtas naudojant Builder šabloną.

Privalumai:

  • Leidžia žingsnis po žingsnio kurti sudėtingus objektus.
  • Užtikrina geresnę kontrolę proceso metu.
  • Leidžia keisti objekto vidinį vaizdą.
  • Supaprastina tų pačių objektų įvairių variacijų kūrimą.

Pavyzdys:

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

    public void Display()
    {
        Console.WriteLine($"Automobilis su varikliu: {Engine}, spalva: {Color}, ratais: {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 = "Raudona";
    }

    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();
    }
}

// Naudojimas
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();
    }
}