Java Pattern Creational
Diese Muster haben gemeinsam, dass sie Instanzen von Klassen erzeugen.
AbstractFactory
Factory
Builder
Das BuilderPattern gehört ebenfalls zu den erzeugenden Pattern. Hier steht die schrittweise Bereitstellung der einzelnen Attribute im Vordergrund. Die Erzeugung der daraus resultierenden Instanzkann dann später zu einem definierten Zeitpunkt erfolgen. Dieses ist bei den meisten Generatoren die Methode build()
. An dieser Stellen kann dann überprüft werden, ob die Attribute in ihrer Kombination zu einer gültigen Instanz der Zielklasse führen. Ein Builder kann über n - Schritte von verschiedenen Teinehmern mit den Werten befüllt werden. Man kann sich ebenfalls vorstellen, das verschiedene Teilnehmer asynchron den jeweils von ihnen gelieferten Teil der Attribute dem Builder zur Verfügung stellen.
Builder für veränderbare Objekte
Der Builder für veränderbare Objekte kann man als den UrTypen bezeichen. Dieser ist der wohl einfachste und bekannteste Builder.
Beispiel Implementierung
Builder für unveränderbare Objekte
Der Builder für unveränderliche Objekte ist ein wenig abgewandelt, da er entweder die Attribute mittels dem privaten Konstruktor setzt, oder nach der Instanziierung mittels Reflection. Das Ergebnis ist eine Objektinstanz die selber nicht über Setter-Methoden verfügt. Natürlich ist dieses kein Schutz vor der Verwednung und Modifikation mittels Reflection, ist aber in dern meisten Fällen ausreichend.
Beispielimplementierung
Builder mit asynchronen Zulieferern
Nehmen wir im Folgenden an, dass die Erzeugung der Attribute sehr Zeitaufwendig ist. Hier kann evtl eine parallele Anforderung der Attribute einen SpeedUp erzeugen. Hier werden demnach nicht die Attribute selbst übergeben, sondern die Quellen um die Attributewerte zu erhalten. Diese Aufrufe sind nicht blokierend. Erst die Methode build()
selbst ist dann wieder blokierend um auf alle Quellen zu warten.
Beispielimplementierung
Builder mit concurrent Zulieferern
Eine Instanz eines Builders kann man an verschiedene Attributzulieferer übergeben die dann parallel mit der Versorgung der Attribute beginnen. Erst der blokierende Aufruf der Methode build()
gibt eine fertige Instanz zurück.
Beispielimplementierung
Batched - Builder
Bisher sind wir immer davon ausgegangen das die Verwendung des Builders immer nur eine Instanz der Zielklasse zurückliefert. Aber warum sollte dasso sein? Mann kann sich auch vorstellen, das ein Builder unter der Angabe von Parametern eine Reihe von Instanzen erzeugt. Ich bezeichne dieses als Batched-Builder.
Beispielimplementierung