Erbauer [ Übersicht ] [ Beispiel ] [ Quellen ] [ Home Entwurfsmuster ]


Übersicht

[klick] zum vergrössern
 Abb. 1: Das Builder Design Pattern

Das Builder-Pattern wird genutzt, wenn die Konstruktion eines komplexen Objektes von seiner Repräsentation getrennt werden soll. Das Objekt («ConcreteProduct») konstruiert sich also nicht selber, sondern wird von einem anderen Objekt («ConcreteBuilder») erbaut.

Da es sich bei den zu konstruierenden Objekten um komplexe Objekte handelt, lässt sich der Konstruktionsprozess oft in mehrere Teilschritte unterteilen. Diese Unterteilung findet sich in den buildXXX()-Methoden des «ConcreteBuilder» wieder.

Exisiteren nun ähnlich zu erzeugenden Objekte, so werden diese in der abstrakten Klasse «Product» zusammengefasst. Damit lässt sich genauso der Konstruktionsprozess abstrahieren und in der abstrakten Oberklasse «Builder» definieren.
Für jedes «ConcreteProduct» existiert ein «ConcreteBuilder», der die im «Builder» definierten buildXXX()-Methoden implementiert.

Durch die Trennung von Repräsentation und Konstruktion ist es möglich, mittels demselben Konstruktionsprozess unterschiedliche Repräsentationen zu erzeugen. An dieser Stelle wird nun der «Director» eingeführt, mit dem der Konstruktionsprozess, so wie er im «Builder» definiert ist, durch einen Aufruf einer speziellen Methode (construct()) ausgeführt werden kann. Vorab wird dem «Director» ein «ConcreteBuilder» zugewiesen, der «Director» operiert jedoch nur auf den im abstrakten «Builder» definierten Methoden.


Noch einmal die spezifizierten Stereotypen:

  • «Builder»
    - definiert eine abstrakte Schnittstelle zum Erzeugen von Teilen eines Produktobjekts.


  • «ConcreteBuilder»
    - erzeugt das «ConcreteProduct», indem es die Teile erzeugt und zusammenfügt. Basis sind dabei die im «Builder» definierten Methoden.
    - definiert und verwaltet das von diesem «ConcreteBuilder» erzeugte Objekt.
    - bietet eine Schnittstelle, über die das «ConcreteProduct» einem Client zurückgegeben werden kann.


  • «Director»
    - konstruiert ein Objekt mittels Verwendung der «Builder»-Schnittstelle.


  • «ConcreteProduct»
    - repräsentiert das gerade konstruierte komplexe Objekt.
    - umfasst alle Klassen, die für das komplexe Objekt benötigt werden

Die Interaktionsequenz:
  • Der Client erzeugt das «Director»-Objekt und weist diesem den gewünschten «ConcreteBuilder» zu.
  • Durch den Aufruf der Konstruktionsmethode des «Director»-Objekts wird der «ConcreteBuilder» durch den «Director» informiert, wenn ein neues Teil erzeugt werden soll.
  • Der «ConcreteBuilder» bearbeitet die Anfragen und fügt die Teile zum «ConcreteProduct» zusammen.
  • Der Client erhält das «ConcreteProduct» vom «ConcreteBuilder».

Quelle: E.Gamma, R.Helm, R.Johnson, J.Vlissides: Entwurfsmuster, Addison Wesley Verlag 2004


[ Übersicht ] [ Beispiel ] [ Quellen ] [ Home Entwurfsmuster ]
Stand: 31.03.2005, Autor: Jens Günther