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

Prototype

Singleton

results matching ""

    No results matching ""