Sobes.tech
Middle

Τι είναι το μοτίβο σχεδίασης Builder;

sobes.tech AI

Απάντηση από AI

Το πρότυπο σχεδίασης Builder προορίζεται για τη δημιουργία πολύπλοκων αντικειμένων βήμα προς βήμα. Διαχωρίζει τη διαδικασία κατασκευής του αντικειμένου από την αναπαράστασή του, επιτρέποντας τη χρήση της ίδιας διαδικασίας κατασκευής για τη δημιουργία διαφορετικών αναπαραστάσεων.

Βασικά συστατικά:

  • Builder: Διεπαφή ή αφηρημένη κλάση που ορίζει τις μεθόδους για τη δημιουργία μερών του αντικειμένου.
  • ConcreteBuilder: Υλοποίηση της διεπαφής Builder, που κατασκευάζει και συναρμολογεί τα μέρη του αντικειμένου.
  • Director: Ορίζει τη σειρά με την οποία καλούνται οι μέθοδοι του ConcreteBuilder για τη δημιουργία του αντικειμένου. Προαιρετικό συστατικό.
  • Product: Πολύπλοκο αντικείμενο που δημιουργείται με τη χρήση του προτύπου Builder.

Πλεονεκτήματα:

  • Επιτρέπει τη δημιουργία πολύπλοκων αντικειμένων βήμα προς βήμα.
  • Παρέχει καλύτερο έλεγχο στη διαδικασία κατασκευής.
  • Επιτρέπει την αλλαγή της εσωτερικής αναπαράστασης του αντικειμένου.
  • Διευκολύνει τη δημιουργία διαφορετικών παραλλαγών του ίδιου αντικειμένου.

Παράδειγμα:

// Προϊόν
public class Car
{
    public string Engine { get; set; }
    public string Color { get; set; }
    public int Wheels { get; set; }

    public void Display()
    {
        Console.WriteLine($"Αυτοκίνητο με κινητήρα: {Engine}, χρώμα: {Color}, τροχούς: {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 = "Κόκκινο";
    }

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

    public Car GetResult()
    {
        return _car;
    }
}

// Διευθυντής
public class CarDirector
{
    private ICarBuilder _builder;

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

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

// Χρήση
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();
    }
}