22. Januar 2013

Entwurfsmuster: Fabrikmethode

Das Entwurfsmuster "Fabrikmethode" (engl. "Factory-Method") gehört zur Gruppe der Erzeugungsmuster und beschreibt, wie Objekte über Methoden-, statt über Konstruktoraufrufe erzeugt werden können. Manchmal wird diese Technik auch "virtueller Konstruktor" (engl. "Virtual Constructor") genannt. Der folgende Code zeigt diesen Unterschied:
 // Instanziierung über Konstruktor  
 Object object = new Objekt();  
   
 // Instanziierung über Fabrikmethode  
 Object object = new ObjectFactory().createObject();  
Seine Anwendung findet dieses Erzeugungsmuster, wenn dem Klienten die Art der Objekte, die erzeugt werden sollen, nicht bekannt ist, da durch dessen Benutzung eine dedizierte Schnittstelle zum Erzeugen von Objektinstanzen definiert wird. Das Prinzip der Fabrikmethoden kann, wie im Folgenden dargestellt, in Form eines Klassendiagramms dargestellt werden:

Klassendiagramm des Entwurfsmusters "Fabrikmethode"

Das Interface "Product" beschreibt hierbei die Schnittstelle, die jedes Objekt, das über die verschiedenen Fabrikmethoden erzeugt werden soll, implementieren muss. Die Erzeugung der jeweiligen Objekte selbst geschieht durch konkrete Fabrik-Implementierungen, die von einer abstrakten Fabrik, die die einheitliche Fabrikmethode definiert, abgeleitet werden. Es sind hierbei auch mehrere parametrisierte Fabrikmethoden denkbar.

Vorteile:
  • Die Objekterzeugung wird in der jeweiligen Factory-Klasse gekapselt und wird somit austauschbar, da der Klient nur deren Schnittstelle kennt.
  • Weitere Konstruktionsvarianten können mit wenig Aufwand durch die Einführung einer neuen abgeleiteten Fabrik hinzugefügt werden.
  • Die verschiedenen Factory-Klassen können unabhängig voneinander gewartet bzw. geändert werden.
  • Die Factory-Klasse kann zur Erzeugung verschiedene Parameter oder innere Zustände heranziehen.
Nachteile:
  • Ein konkreter Erzeuger ist stark an das zu erzeugende Produkt gebunden, was dazu führt, dass neue Produkte stets auch neue Erzeuger erfordern. 

Der Begriff der Fabrikmethode wird teilweise auch verwendet, wenn nur die Objektinstanziierung über eine Methode, statt über einen Konstruktor, ohne die Verwendung von Unterklassen, gemeint ist, was jedoch nicht der eigentlichen Definition des Pattern entspricht. 

Keine Kommentare:

Kommentar veröffentlichen