9.6.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();
Sven

Softwareentwickler

Zur Übersicht

Standort Hannover

newcubator GmbH
Bödekerstraße 22
30161 Hannover

Standort Dortmund

newcubator GmbH
Westenhellweg 85-89
44137 Dortmund