Sobes.tech
Middle

Co je to návrhový vzor Builder?

sobes.tech AI

Odpověď od AI

Vzor návrhu Builder je určen pro krokové vytváření složitých objektů. Odděluje proces konstrukce objektu od jeho reprezentace, což umožňuje používat stejný konstrukční proces k vytváření různých reprezentací.

Hlavní komponenty:

  • Builder: Rozhraní nebo abstraktní třída, která definuje metody pro vytváření částí objektu.
  • ConcreteBuilder: Implementace rozhraní Builder, která sestavuje a skládá části objektu.
  • Director: Určuje pořadí volání metod ConcreteBuilder pro vytvoření objektu. Volitelná komponenta.
  • Product: Složitý objekt, který je vytvářen pomocí vzoru Builder.

Výhody:

  • Umožňuje krokové vytváření složitých objektů.
  • Zajišťuje lepší kontrolu nad procesem konstrukce.
  • Umožňuje měnit vnitřní reprezentaci objektu.
  • Usnadňuje vytváření různých variací téhož objektu.

Příklad:

// Produkt
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 motorem: {Engine}, barvou: {Color}, koly: {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 = "Červená";
    }

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

    public Car GetResult()
    {
        return _car;
    }
}

// Ředitel
public class CarDirector
{
    private ICarBuilder _builder;

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

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

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