Builder

Builder Pattern

Das "builder pattern" (Erbauer) ist aus der Kategorie der Erzeugungsmuster und trennt die Erzeugung komplexer Objekte von deren Repräsentationen. Desweiteren 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 Erzeugnug 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
  • Objekterzeugnung wird Übersichtlicher
  • Objekterzeugnung ist weniger Feheranfä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();

Wir freuen uns Sie kennen zu lernen

Hat Sie unser Angebot überzeugt? Dann freuen wir uns, Sie kennen zu lernen. Kontaktieren Sie uns gerne für ein unverbindliches Erstgespräch.

newcubator GmbH
Freie-Vogel-Straße 369
44269 Dortmund
dortmund@newcubator.com
+49 231/586 873 80
newcubator GmbH
Bödekerstraße 22
30161 Hannover
hannover@newcubator.com
+49 511/957 313 00