Builder-Modus – kurze Einführung 01

Das Builder-Muster ist ein kreatives Entwurfsmuster, dessen Hauptzweck darin besteht, den Konstruktionsprozess eines komplexen Objekts von seiner Darstellung zu trennen, sodass mit demselben Konstruktionsprozess unterschiedliche Darstellungen erstellt werden können. In diesem Muster ist das Builder-Objekt für die Konstruktion verschiedener Teile des Objekts verantwortlich, während das Director-Objekt für die Vereinheitlichung des Konstruktionsprozesses und die Rückgabe des erstellten Objekts verantwortlich ist.

In Java umfasst das Builder-Muster normalerweise die folgenden Rollen:

  1. Produktrolle (Produkt): Ein komplexes Objekt, das erstellt werden muss.

  2. Abstrakte Builder-Rolle (Builder): Definiert die Schnittstelle zum Erstellen jeder Komponente des Produkts und ist für den Konstruktionsprozess des Objekts verantwortlich.

  3. Spezifische Builder-Rolle (ConcreteBuilder): Implementieren Sie die Builder-Schnittstelle, realisieren Sie die Konstruktion jeder Komponente und geben Sie das gebaute Produkt zurück.

  4. Rolle des Direktors (Director): Verantwortlich für die Vereinheitlichung des Build-Prozesses, d. h. das Aufrufen von Buildern in einer bestimmten Reihenfolge, um Produkte zu erstellen.

Durch die Verwendung des Builder-Musters kann der Erstellungsprozess komplexer Objekte effektiv vereinfacht werden, wodurch der Code klarer und verständlicher wird und der Code auch problemlos erweitert und verwaltet werden kann.

Hier ist ein einfaches Beispiel für die Verwendung des Builder-Musters zum Erstellen einer Essensbestellung:

Definieren Sie zunächst ein Essensbestellungsobjekt:

public class FoodOrder {
    private String burger;
    private String fries;
    private String drink;
    private String dessert;

    public void setBurger(String burger) {
        this.burger = burger;
    }

    public void setFries(String fries) {
        this.fries = fries;
    }

    public void setDrink(String drink) {
        this.drink = drink;
    }

    public void setDessert(String dessert) {
        this.dessert = dessert;
    }

    // other methods
}

Definieren Sie dann eine abstrakte Builder-Schnittstelle:

public interface FoodOrderBuilder {
    public void addBurger(String burger);
    public void addFries(String fries);
    public void addDrink(String drink);
    public void addDessert(String dessert);
    public FoodOrder getFoodOrder();
}

Definieren Sie als Nächstes die konkrete Builder-Implementierung:

public class SimpleFoodOrderBuilder implements FoodOrderBuilder {
    private FoodOrder foodOrder;

    public SimpleFoodOrderBuilder() {
        this.foodOrder = new FoodOrder();
    }

    public void addBurger(String burger) {
        this.foodOrder.setBurger(burger);
    }

    public void addFries(String fries) {
        this.foodOrder.setFries(fries);
    }

    public void addDrink(String drink) {
        this.foodOrder.setDrink(drink);
    }

    public void addDessert(String dessert) {
        this.foodOrder.setDessert(dessert);
    }

    public FoodOrder getFoodOrder() {
        return this.foodOrder;
    }
}

Schreiben Sie abschließend die Kommandantenrolle, verwenden Sie die Builder-Objekte in einer bestimmten Reihenfolge in dieser Rolle und erstellen Sie Essensbestellungen:

public class FoodOrderDirector {
    private FoodOrderBuilder builder;

    public FoodOrderDirector(FoodOrderBuilder builder) {
        this.builder = builder;
    }

    public void makeFoodOrder() {
        builder.addBurger("Big Mac");
        builder.addFries("Large Fries");
        builder.addDrink("Coca Cola");
        builder.addDessert("McFlurry");
    }
}

Der Code zum Erstellen einer Essensbestellung lautet nun wie folgt:

FoodOrderBuilder builder = new SimpleFoodOrderBuilder();
FoodOrderDirector director = new FoodOrderDirector(builder);
director.makeFoodOrder();
FoodOrder order = builder.getFoodOrder();

Durch den Builder-Modus können wir beim Erstellen einer Essensbestellung bestimmte Schritte und Sequenzen über die Kommandantenrolle definieren, und der jeweilige Builder ist für die Erstellung jedes Teils des Bestellobjekts verantwortlich. Auf diese Weise kann der Konstruktionsprozess des Objekts effektiv von seiner Darstellung getrennt werden, was das Verständnis und die Wartung des Codes erleichtert.

Guess you like

Origin blog.csdn.net/qq_43545600/article/details/131303757