Sobes.tech
Middle

Kas ir Builder dizaina paraugs?

sobes.tech AI

Atbilde no AI

Dizaina šablons Builder paredzēts sarežģītu objektu pakāpeniskai izveidei. Tas atdala objekta būvniecības procesu no tā attēlojuma, ļaujot izmantot to pašu būvniecības procesu dažādu attēlojumu izveidei.

Galvenās sastāvdaļas:

  • Builder: Saskarne vai abstrakta klase, kas definē metodes objekta daļu izveidei.
  • ConcreteBuilder: Builder saskarnes realizācija, kas būvē un saliek objekta daļas.
  • Director: Nosaka ConcreteBuilder metožu izsaukšanas secību objekta izveidei. Neobligāta sastāvdaļa.
  • Product: Sarežģīts objekts, kas izveidots ar Builder šablona palīdzību.

Priekšrocības:

  • Atvieglo sarežģītu objektu pakāpenisku izveidi.
  • Nodrošina labāku kontroli pār būvniecības procesu.
  • Ļauj mainīt objekta iekšējo attēlojumu.
  • Vienkāršo vienas un tās pašas objekta dažādo variāciju izveidi.

Piemērs:

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

    public void Display()
    {
        Console.WriteLine($"Mašīna ar motoru: {Engine}, krāsu: {Color}, riteņiem: {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 = "Sarkana";
    }

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

// Lietošana
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();
    }
}