Muster: ClassFactory

Aus Wikibooks

KlassenFabrik[Bearbeiten]

Fabrik (englisch Factory) es wird zumeist zwischen Fabrikmethode und Abstrakten Fabrik unterschieden.

Zweck[Bearbeiten]

Das Factory-Pattern stellt ein Interface zur Erstellung eines Objektes. Dabei wird es den Unterklassen der Factory-Klasse überlassen, welche konkreten Klassen instanziiert werden. Die Factory-Klasse biete dabei eine abstrakte Methode, die von den Unterklassen überschrieben werden.

UML[Bearbeiten]

Abstrakte Fabrik[Bearbeiten]

Fabrikmethode[Bearbeiten]

Anwendungsfälle[Bearbeiten]

Das "Fabrik-Muster" ist besonders hilfreich, um zur Laufzeit oder in verschiedenen Ausführungskontexten unterschiedliche Objekte zu erzeugen indem man die konkrete Fabrikklasse austauscht.

Das Factory-Pattern kann eingesetzt werden, wenn die aufrufende Klasse nicht weiß, welche konkreten Klassen und wie konkrete Klassen zu instanziieren sind.

Auch wenn eine Verzögerung bei der Instantiierung notwendig ist, ist das Factory-Pattern sinnvoll einzusetzen.

Beispiel: Es kann eine konkrete Fabrik geben, die zu Testzwecken Produkte erzeugt, mit deren Hilfe sich das Verhalten der Objekte, die die Produkte verwenden gezielt prüfen lässt. Eine Instanz außerhalb des Klienten übergibt diesem je nach Kontext (Test oder Anwendung) die passende konkrete Fabrik als Besucher.

Vorteile[Bearbeiten]

  • abstrakter, wiederverwendbarer Code
  • Entkopplung von konkreten Implementierungen
  • Modularisierung: Austausch von konkreter Objekterzeugung und Erweiterung mit neuen Objekten

Implementation[Bearbeiten]

Für die Umsetzung einer Fabrikmethode kann wie folgt implementiert werden:

  • Für jede unterschiedliche Erzeugungsmöglichkeit eine eigene Methode.
  • Eine create()-Methode welche mit einem Parameter für die gewünschte Erzeugung.

Für die Umsetzung der Abstrakten Fabrik ist folgende Implementation notwendig:

  • Ein Interface für die Fabrik, diese sollte eine create Methode für jedes Produkt enthalten.
  • Eine konkrete Implementierung für jede Familie.
  • Ein Interface für jedes Produkt.
  • Eine Implementierung für jedes Produkt zu jeder Familie.

Verwandte Muster[Bearbeiten]

  • Eine konkrete Fabrik kann mittels des Prototypmusters implementiert werden.
  • Die abstrakte Fabrik bietet Fabrikmethoden (erzeugeA(), ...) an, die in den konkreten Fabrik-Unterklassen implementiert/überschrieben werden.
  • Für jede Produktfamilie wird genau ein Exemplar einer konkreten Fabrik benötigt. Die konkrete Fabrik könnte somit als Singleton implementiert werden.