Was ist das Builder-Entwurfsmuster?

Was ist das Builder-Entwurfsmuster?

Das Builder-Entwurfsmuster kapselt die Eigenschaften eines Objekts und ermöglicht es Ihnen, eine Darstellung davon zu erstellen. Mit diesem Muster können Sie komplexe Objekte mit unterschiedlichen Eigenschaften konstruieren, obwohl sie zur selben Klasse gehören.

Eine typische Objektklasse enthält Attribute, Konstruktoren und Methoden. Mit dem Builder-Muster können Sie die Konstruktionslogik aus der Objektklasse extrahieren und in Klassen namens Builder platzieren. Sie können diese Builder-Klassen dann verwenden, um verschiedene Variationen desselben Objekts zu erstellen.

Implementieren des Builder-Musters in Java

Ein gutes Beispiel für das Builder-Muster ist ein Pizza-Bestellsystem, das es Kunden ermöglicht, verschiedene Belagsoptionen auszuwählen.

Die Produktklasse

Ein Ansatz besteht darin, den Builder zu einer Schnittstelle zu machen, aber Sie müssen zuerst eine Produktklasse erstellen. Das Produkt in dieser Beispielanwendung ist eine Pizza.

public class Pizza {
    // properties
    private int orderNumber;
    private String pizzaDough;
    private String topping;

    // getters and setters
    public int getOrderNumber() {
        return orderNumber;
    }

    public void setOrderNumber(int orderNumber) {
        this.orderNumber = orderNumber;
    }

    public String getPizzaDough() {
        return pizzaDough;
    }

    public void setPizzaDough(String pizzaDough) {
        this.pizzaDough = pizzaDough;
    }

    public String getTopping() {
        return topping;
    }

    public void setTopping(String topping) {
        this.topping = topping;
    }
}

Die Baumeisterklasse

Die Pizza-Java-Klasse hat drei Eigenschaften und ihre jeweiligen Getter und Setter, aber es gibt keine Konstruktormethoden. Die Builder-Oberfläche ermöglicht es Ihnen, jeden Aspekt des Pizza-Objekts separat zu erstellen. Es ermöglicht Ihnen dann, das gesamte Pizzaobjekt abzurufen.

public interface Builder {
    public void createPizzaDough();
    public void createTopping();
    public Pizza getPizza();
}

Die Beispiel-Pizza-Anwendung ermöglicht es Kunden, beliebige Beläge wie Käse, Peperoni, Zwiebeln oder verschiedene Kombinationen zu bestellen. Daher ist eine Pizza, die ein Kunde bestellt, Käse.

public class CheesePizzaBuilder implements Builder {
    private Pizza pizza;

    public CheesePizzaBuilder() {
        this.pizza = new Pizza();
    }

    @Override
    public void createPizzaDough() {
        this.pizza.setPizzaDough("Dough");
    }

    @Override
    public void createTopping() {
        this.pizza.setTopping("Cheese");
    }

    @Override
    public Pizza getPizza() {
        return this.pizza;
    }
}

Die CheesePizzaBuilder-Klasse implementiert die Builder-Schnittstelle und verwendet sie, um eine neue Käsepizza zu erstellen. Dies ist eine Darstellung des Pizza-Objekts. Dies geschieht auch unabhängig von der Pizza-Klasse.

Die CheesePizzaBuilder-Klasse weiß nicht viel über die Pizza-Klasse, sie weiß nur, was sie wissen muss, um ihre Funktion zu erfüllen. Es weiß, dass die Klasse Pizza eine Teig- und eine Belagseigenschaft hat, und setzt diese Eigenschaften auf zwei spezifische Werte, die jede Käsepizza haben wird. Jedes Mal, wenn die Anwendung die CheesePizzaBuilder-Klasse aufruft, erstellt sie jetzt eine neue Pizza mit Käsebelag.

Die Regieklasse

Die Director-Klasse ist ein entscheidender Aspekt des Builder-Musters. Der einzige Zweck einer konkreten Builder-Klasse besteht darin, ein bestimmtes Objekt zu erstellen. Dies wird erreicht, indem die verschiedenen Teile eines Objekts separat erstellt werden.

Der Algorithmus ist den Builder-Concrete-Klassen jedoch nicht bekannt. Keine der Baumeisterklassen weiß, wie man den Teig baut, bevor man den Belag hinzufügt. Dies ist die Funktion der Director-Klasse.

public class Director {
    private Builder pizzaBuilder;

    public Director(Builder pizzaBuilder) {
        this.pizzaBuilder = pizzaBuilder;
    }

    public Pizza getPizza() {
        return this.pizzaBuilder.getPizza();
    }

    public void makePizza() {
        this.pizzaBuilder.createPizzaDough();
        this.pizzaBuilder.createTopping();
    }
}

Die Director-Klasse verwendet die Builder-Schnittstelle, um Pizzas zu erstellen. Es ist der Hüter des Algorithmus.

Die Vorteile der Verwendung des Builder-Entwurfsmusters

Der Hauptvorteil der Verwendung des Builder-Entwurfsmusters ist seine Kapselungseigenschaft. Dies ist ein entscheidender Aspekt des Software-Engineerings, da es bei der Entwicklung sicherer Anwendungen hilft.

Ein weiterer Vorteil dieses Entwurfsmusters ist sein Objektkonstruktionsansatz. Sie können damit mehrstufige Prozesse erstellen, bei denen jeder Schritt unabhängig ist, was das Debuggen erleichtert.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert