Java Reference
In-Depth Information
4.18 Das Erzeugungsmuster Fabrikmethode
4.18.1
Name/Alternative Namen
Fabrikmethode (engl. factory method), Virtueller Konstruktor.
4.18.2
Problem
Eine wiederverwendbare Anwendung wie ein Framework soll nur Basisklassen bzw.
abstrakte Basisklassen oder Interfaces enthalten. Das bedeutet, dass eine wiederver-
wendbare Anwendung Objekte nicht hart codiert erzeugen kann, da sie die eigent-
lichen Klassen ja gar nicht kennt. Diese Klassen sollen erst zur Laufzeit von dem Pro-
gramm, das die wiederverwendbare Anwendung benutzt, zur Verfügung gestellt wer-
den.
Eine Klasse soll ein Objekt erzeugen, dessen Typ sie nicht kennt,
bzw. dessen Typ erst zur Laufzeit des Programms bekannt ist.
Die erzeugende Klasse kennt nur die Basisklasse des zu erzeu-
genden Objekts zur Kompilierzeit, weiß aber nicht, von welcher
Unterklasse das entsprechende Objekt zur Laufzeit im lauffähigen
Programm später sein soll.
In stark typisierten Sprachen wie Java wird beim Aufruf des new -Operators der Typ
des zu erzeugenden Objekts im Programmtext statisch festgelegt. Es gibt keine Mög-
lichkeit, den Typ eines erzeugten Objekts im Nachhinein zu verändern. Zur Erzeugung
und Initialisierung eines Objektes wird in Java der new -Operator mit dem Konstruktor,
der dem Klassennamen entspricht, verwendet. Diese Vorgehensweise ist natürlich
sehr inflexibel. Die Klasse eines zu erzeugenden Objekts soll hier eben nicht im Pro-
grammtext festgelegt werden. Damit kann beispielsweise in Java die Erzeugung nicht
direkt mit new erfolgen. Ein Programm soll überdies stabil bleiben, auch wenn sich der
Typ des zu erzeugenden Objekts ändert.
Der alternative Name "Virtueller Konstruktor" beschreibt das Problem sehr gut. Er
stammt aus dem Kontext der Sprache C++. In C++ müssen alle Methoden, die poly-
morph sein sollen, mit dem Schlüsselwort virtual gekennzeichnet werden. Daher
spricht man auch von virtuellen Methoden. Wann immer die Erzeugung eines Objektes
polymorph sein soll - also erst zur Laufzeit entschieden werden soll, welcher Konstruk-
tor zu wählen ist, um ein Objekt des entsprechenden Typs zu erzeugen - hätte man
folglich gerne einen virtuellen Konstruktor. Konstruktoren können aber nicht über-
schrieben werden und sind daher nicht polymorph. Das Muster Fabrikmethode stellt
also quasi einen Ersatz für einen virtuellen Konstruktor dar: die Erzeugung eines
Objekts wird in eine Methode verpackt, die polymorph ist. Diese Methode wird in der
Lösung als Fabrikmethode bezeichnet.
Search WWH ::




Custom Search