21.4.2021 |

Builder

Builder Pattern

Das "builder pattern" (Erbauer) ist aus der Kategorie der Erzeugungsmuster und trennt die Erzeugung komplexer Objekte von deren Repräsentationen. Des Weiteren wird durch dieses Pattern die Erzeugung von Objekten übersichtlicher und weniger Fehleranfällig. Eine Erbauer-Klasse ermögtlicht es, ein Objekt schrittweise aufzubauen.

Quelle: Wikipedia, Buch: "Besser coden" von Uwe Post

Beispiels Scenario

Angenommen es sollen 3 verschiedene Dialogboxen erstellt werden.

  1. Dialogbox für einen Infotext bestehend aus Headline, Text, Bestätigungsbutton.
  2. Dialogbox für eine Abfrage (Elemente aus der 1. Dialogbox + Abbrechbutton)
  3. Dialogbox mit drei Buttons (Headline, Text, Bestätigungsbutton, Abbrechbutton, Randombutton)

Würde man jetzt drei unabhängige Klassen erstellen hätte dies mehrere Nachteile:

  • Sollte aus 1. Dialogbox eine zweite gemacht werden muss das Objekt komplett neu erzeugt werden im Client
  • Wenn weitere Parameter zur Erzeugung benötigt werden leidet sehr schnell die Übersicht da lange Parameterlisten den Code unübersichtlich machen
  • Falls gewisse Parameter optional sind steigt die Komplexität und damit die Fehleranfälligkeit der Erzeugnung z.B. können Fehler in der Reihnfolge passieren

Lösung mittels builder pattern

Durch das builder pattern kann der Client den Dialogboxbuilder erzeugen, anschließend konfigurieren und erhält am Ende die benötigte Dialogbox. Leichte Anpassungen einer Dialogbox beeinflussen nicht die anderen Dialogboxen. Vorhandenen Dialogboxen bleibt erhalten. Zusätzlich existieren lange Parameterlisten nur noch an einer Stelle und optionale Werte können mit einem sinnvollen Standardwert versehen und müssen nicht weiter beachtet werden.

So könnte dann Beispielsweise eine Dialogbox nach und nach aufgebaut werden:

class Client{
  DialogBoxBuilder abfrageBox = new AbfrageBox();
  abfrageBox.setHeadline("News");
  abfrageBox.setText("Loremipsum..");
  abfrageBox.setButtonOneText("Klick mich");
  abfrageBox.setButtonOneLink("http://google.de");
  abfrageBox.build();
}

Vorteile

  • Trennung von Konstruktion und Repräsentationen
  • Objekterzeugung wird Übersichtlicher
  • Objekterzeugung ist weniger fehleranfällig

Nachteile

  • Es besteht eine enge Kopplung zwischen Produkt, konkretem Erbauer und den am Konstruktionsprozess beteiligten Klassen.

Tipp

Für eine kompaktere und übersichtlichere Schreibweise ist es zum Vorteil, wenn jede set-Methode das Builder-Objekt zurück gibt.

public DialogBoxBuilder setHeadline(String headline){
    this.headline = headline;
    return this;
}

Dadurch ist es möglich, set-Aufrufe zu verketten:

  DialogBoxBuilder abfrageBox = new AbfrageBox();
  abfrageBox = abfrageBox.setHeadline("News")
                         .setText("Loremipsum..")
                         .setButtonOneText("Klick mich");
                         .setButtonOneLink("http://google.de");
                         .build();
Zur Übersicht
Patrick Schaper

Mehr vom Devsquad...

Lucas Meurer

MARP - Markdown Presentations

Valerie Schramm

Google Structured Data

Hallo, ich bin Jörg Herbst!

Ich bin der CEO von newcubator und freue mich über jede Nachricht!

* Pflichtfeld