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.
- Dialogbox für einen Infotext bestehend aus Headline, Text, Bestätigungsbutton.
- Dialogbox für eine Abfrage (Elemente aus der 1. Dialogbox + Abbrechbutton)
- 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();
Standort Hannover
newcubator GmbH
Bödekerstraße 22
30161 Hannover
Standort Dortmund
newcubator GmbH
Westenhellweg 85-89
44137 Dortmund