Sobes.tech
Middle

Čo je to návrhový vzor Builder?

sobes.tech AI

Odpoveď od AI

Vzor návrhu Builder je určený na krokové vytváranie zložitých objektov. Oddelí proces konštrukcie objektu od jeho zobrazenia, čo umožňuje použiť rovnaký konštrukčný proces na vytvorenie rôznych zobrazení.

Hlavné komponenty:

  • Builder: Rozhranie alebo abstraktná trieda, ktorá definuje metódy na vytváranie častí objektu.
  • ConcreteBuilder: Implementácia rozhrania Builder, ktorá konštruuje a skladá časti objektu.
  • Director: Určuje poradie volaní metód ConcreteBuilder na vytvorenie objektu. Voliteľná zložka.
  • Product: Zložitý objekt, ktorý sa vytvára pomocou vzoru Builder.

Výhody:

  • Umožňuje krokové vytváranie zložitých objektov.
  • Zabezpečuje lepšiu kontrolu nad procesom stavby objektu.
  • Umožňuje meniť vnútorné zobrazenie objektu.
  • Zjednodušuje vytváranie rôznych variácií toho istého objektu.

Príklad:

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

    public void Display()
    {
        Console.WriteLine($"Auto s motorom: {Engine}, farbou: {Color}, kolesami: {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();
    }
}

// Použitie
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();
    }
}