Sobes.tech
Middle

Was ist das Builder-Designmuster?

sobes.tech KI

Antwort von AI

Das Entwurfsmuster Builder ist dazu gedacht, komplexe Objekte schrittweise zu erstellen. Es trennt den Konstruktionsprozess des Objekts von seiner Darstellung, sodass derselbe Konstruktionsprozess verwendet werden kann, um verschiedene Darstellungen zu erstellen.

Hauptkomponenten:

  • Builder: Schnittstelle oder abstrakte Klasse, die Methoden zur Erstellung von Objektteilen definiert.
  • ConcreteBuilder: Implementierung der Builder-Schnittstelle, die Teile des Objekts konstruiert und zusammenfügt.
  • Director: Bestimmt die Reihenfolge, in der die Methoden des ConcreteBuilder aufgerufen werden, um das Objekt zu erstellen. Optional.
  • Product: Komplexes Objekt, das mit dem Builder-Pattern erstellt wird.

Vorteile:

  • Ermöglicht die schrittweise Erstellung komplexer Objekte.
  • Bietet bessere Kontrolle über den Bauprozess.
  • Ermöglicht die Änderung der internen Darstellung des Objekts.
  • Erleichtert die Erstellung verschiedener Variationen desselben Objekts.

Beispiel:

// 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 mit Motor: {Engine}, Farbe: {Color}, Räder: {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 = "Rot";
    }

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

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