Java Reference
In-Depth Information
4.19 Das Erzeugungsmuster Abstrakte Fabrik
4.19.1
Name/Alternative Namen
Abstrakte Fabrik (engl. abstract factory, kit oder toolkit).
4.19.2
Problem
Die Problemstellung soll zunächst anhand von zwei Beispielen verdeutlicht werden: Im
ersten Beispiel werden Schrauben und Muttern, die es in unterschiedlichen Größen
und Gewindearten gibt, produziert und verpackt. Da es aber keinen Sinn macht, 10-er
Schrauben und 6-er Muttern miteinander zu verpacken, sollen immer nur passende
Produkte - also 6-er Schrauben und 6-er Muttern bzw. 10-er Schrauben und 10-er
Muttern - erzeugt werden können. 6-er Schrauben und 6-er Muttern bilden in diesem
Beispiel eine zusammengehörige Produktgruppe, eine andere Produktgruppe besteht
aus 10-er Schrauben und 10-er Muttern. Als zweites Beispiel wird eine Anwendung
betrachtet, die mehrere Objekte benötigt, deren Klassen betriebssystemabhängig im-
plementiert werden müssen. Um diese Anwendung lauffähig zu machen, müssen alle
betriebssystemabhängigen Klassen in der richtigen Variante instanziiert werden. Es
muss ausgeschlossen werden, dass eine Klasse beispielsweise in der Linux-Variante
instanziiert wird und eine andere hingegen in der Windows-Variante.
Eine Menge oder Gruppe von Produkten, die miteinander verwandt sind, zueinander
passen oder - allgemein gesprochen - voneinander abhängig sind, wird in diesem
Muster als Produktfamilie bezeichnet.
Es soll gewährleistet werden, dass immer nur Produkte, die zu derselben Produktfami-
lie gehören, erzeugt werden. Die angestrebte Lösung soll flexibel sein, d. h., dass eine
Anwendung selber nicht geändert werden muss, wenn eine andere Variante der Pro-
duktfamilie erzeugt werden soll.
4.19.3
Lösung
Damit die Lösung wie gefordert flexibel wird, enthält das Entwurfsmuster Abstrakte
Fabrik eine abstrakte und eine konkrete Ebene. Die folgende Beschreibung des Mus-
ters verwendet auf der abstrakten Ebene Referenzen auf Interfaces.
Die Abstraktionen können aber genauso gut mittels abstrakter Klassen definiert wer-
den. Die konkreten Klassen müssen dann von den entsprechenden abstrakten Klas-
sen abgeleitet werden, statt die Interfaces zu realisieren.
Das Client-Programm kennt zur Kompilierzeit nur Referenzen auf die Abstrakte Fabrik
und auf die abstrakten Produkte. Jede konkrete Fabrik erzeugt eine jeweils andere
Produktfamilie von konkreten Produkten. Je nachdem, welche konkrete Fabrik zur
Laufzeit an die Stelle der Abstrakten Fabrik tritt, wird die eine oder andere konkrete
Produktfamilie erzeugt.
Search WWH ::




Custom Search