© Excellent backgrounds/Shutterstock.com
Das Builder-Pattern im Einsatz

Mit dem Strickmuster arbeiten


Das Buch der „Gang of Four“ gehört bei so ziemlich jedem Ausbildungszweig der Informatik mit zu der Grundlagenlektüre. Dort werden die Basismuster beschrieben und gruppiert, sodass man einen guten Start in das Thema Design Patterns bekommt. Aber wie sieht es dann später in der Verwendung aus? Wir werden das eine oder andere Pattern genauer unter die Lupe nehmen. Es ist leichter als man befürchten könnte. Wir starten mit dem Builder-Pattern.

Das Builder-Pattern erfreut sich derzeitig immer größerer Beliebtheit, ermöglicht es einem doch die Konstruktion eines Fluent-API. Angenehm ist es ebenfalls, dass eine IDE dieses Pattern recht einfach generieren kann. Dem Einsatz steht nun also nichts mehr im Wege. Aber wie sieht es mit der Verwendung im täglichen Leben aus?

Beginnen wir mit dem Basispattern, dem Grundstock, mit dem wir sicherlich schon alle unsere Erfahrungen gesammelt haben. Als Beispiel nehme ich hier eine Klasse Car mit den Attributen Engine und List. Sicherlich ist die Beschreibung eines Autos hiermit nicht sehr präzise, jedoch reicht es, um einige Eigenarten des Builder-Patterns recht deutlich darzustellen. Beginnen wir mit der Klasse Car:

public class Car { private Engine engine; private List<Wheel> wheelList; // SNIPP }

An dieser Stelle lasse ich die get- und set-Methoden im Listing weg. Wenn man nun hierzu einen Builder generiert, bekommt man den Code von Listing 1.

Listing 1

public static final class Builder { private Engine engine; private List<Wheel> wheelList; private Builder() { } public Builder withEngine(Engine engine) { this.engine = engine; return this; } public Builder withWheelList(List<Wheel> wheelList) { this.wheelList = wheelList; return this; } public Car build() { return new Car(this); } }

Hier ist der Builder als innere statische Klasse realisiert. Ebenfalls ist der Konstruktor der Klasse Car modifiziert worden:

private Car(Builder builder) { setEngine(builder.engine); wheelList = builder.wheelList; }

Zum einen hat ein Wechsel von public auf private stattgefunden, und zum anderen wurde eine Instanz des Builders als Methodenparameter hinzugefügt:

Car car = Car.newBuilder() .withEngine(engine) .withWheelList(wheels)

Wenn man nun mit dem Builder-Pattern arbeitet, gelangt man an den Punkt, an dem man komplexe Objekte aufbauen muss. Erweitern wir nun unser Beispiel, indem wir uns die restlichen Attribute der Klasse Car ansehen (Listing 2).

Listing 2

public class Car { private Engine engine; private List<Wheel> wheelList; } publi...

Exklusives Abo-Special

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang