Design Pattern #5

Autor: NathalieOhneHerz GitHub

Das Builder Pattern

Lasset uns bauen!

Hauptartikel: [Design Pattern #1] Was sind die Design patterns


Im Folgenden soll das "Builder Pattern" genauer beleuchtet werden.


Was ist das Builder Pattern und wann verwendet man es?

Mit dem Builder Pattern kann man ein komplexes Objekt ganz einfach Stück für Stück zusammenbauen. Es lässt sich als Erzeugungsmuster kategorisieren. Gerade bei einer hohen Anzahl an (komplexen) Attributen bietet sich ein Builder an. Er schafft durch die Methodennamen einen hohen Grad an Übersicht. Schritt für Schritt werden in einem Builder die Attribute zusammengesammelt und im finalen Schritt wird das neue Objekt erzeugt. Auch mit dem Builder erreicht ihr ähnlich wie bei der Factory eine saubere Trennung zwischen Konstruktion und Präsentation. Desweiteren werden die einzelnen Schritte der Erzeugung besser kontrolliert.
Einen weiteren Verschönerungseffekt in der Struktur bietet das Builder Pattern, wenn man Objekte mit einer Unmenge an Konstruktoren hat. Alle überladenen Konstruktoren werden durch eine einzige Builder Klasse ersetzt, welche Standardwerte haben kann (s. u.).

Modellierung


Implementierung in Java

package de.nathalieoneill.devtek; /** * @author Nathalie */ public class Citizen { private final String name; private final String familyName; private final SocialClass socialClass; private final int balance; public Citizen(String name, String familyName, SocialClass socialClass, int balance) { this.name = name; this.familyName = familyName; this.socialClass = socialClass; this.balance = balance; } public String getName() { return name; } public int getBalance() { return balance; } public SocialClass getSocialClass() { return socialClass; } public String getFamilyName() { return familyName; } @Override public String toString() { return "Citizen{" + "name='" + name + '\'' + ", familyName='" + familyName + '\'' + ", socialClass=" + socialClass + ", balance=" + balance + '}'; } }
package de.nathalieoneill.devtek; /** * @author Nathalie */ public class CitizenBuilder { private String name = "Nathalie"; private String familyName = "O'neill"; private SocialClass socialClass = SocialClass.LOWER; private int balance = 0; public CitizenBuilder setName(String name) { this.name = name; return this; } public CitizenBuilder setFamilyName(String familyName) { this.familyName = familyName; return this; } public CitizenBuilder setSocialClass(SocialClass socialClass) { this.socialClass = socialClass; return this; } public CitizenBuilder setBalance(int balance) { this.balance = balance; return this; } public Citizen createCitizen() { return new Citizen(name, familyName, socialClass, balance); } }
package de.nathalieoneill.devtek; /** * @author Nathalie */ public enum SocialClass { LOWER, MIDDLE, UPPER; }

Die Verwendung sähe dann so aus:

package de.nathalieoneill.devtek; /** * @author Nathalie */ public class DevTek { public static void main(String[] args) { final Citizen citizen = new CitizenBuilder() .setBalance(0) .setName("Markus") .setFamilyName("Meier") .setSocialClass(SocialClass.UPPER) .createCitizen(); System.out.println(citizen.toString()); } }

Ich hoffe dass ich euch das Builder Pattern näher bringen konnte.

Mit freundlichen Grüßen
Nathalie