Entwurfsmuster – Viele Kindklassen verwalten mit der Factory

Wenn in einem Modul so viele Arbeiter (Kindklassen) vorhanden sind, dass es aussieht wie eine Fabrik, dann könnte die Factory das Entwurfsmuster sein mit dem die Verwaltung wieder einfach wird.

Aber Spaß beiseite: In diesem Beitrag wird es darum gehen verschiedene Typen in Form von Kindklassen effizient zu instanzieren.


Die Ausgangssituation

Viele Klassen eines Interfaces

Unsere Anwendung soll verschiedenen Partnern (die uns möglicherweise auch noch gar nicht alle bekannt sind) eine Schnittstelle zur Verfügung stellen. Natürlich werden die Partner alle etwas anders zu handhaben sein – sie bekommen also alle eine eigene Klasse. Auf unserer Seite muss die Schnittstelle aber für alle das gleiche Resultat liefern, damit wir nicht mit jedem neuen Partner unseren Code anfassen müssen.

Wir erstellen also ein Interface an das sich alle Partner zu halten haben.

Instanzieren der Kindklasse

Stellt der Partner jetzt eine Anfrage an unsere API, benötigen wir eine Instanz „seiner“ Klasse. Da wir natürlich keine Abhängigkeiten erzeugen wollen, müssten wir diese alle in unserem Service-Container ablegen – was sehr schnell ausarten kann. Wir benötigen also eine zentrale Anlaufstelle für alle Partnerklassen: Eine Factory.


Die Factory

Zunächst ihr Code.

Die Factory kann jetzt wie üblich im Service-Container hinterlegt werden und mit ihr wird dann die entsprechende Partner-Klasse geladen.


Varianten

Obiges Beispiel zeigt eine Factory als eigene Klasse, alternativ dazu gibt es noch die Möglichkeit als Methode in einer abstrakten Elternklasse.

Factory-Methode

Diese Vorgehensweise führt zu einer statischen Methode, die in UnitTests Komplikationen nach sich zieht. Dazu kommt, dass eine abstrakte Klasse nicht im Service-Container hinterlegt werden kann. Diese Art der Factory ist also weniger geschickt als eine eigenständige Klasse.


Fazit

Mit dem Entwurfsmuster der Factory erhalten wir eine zentrale Anlaufstelle für alle Klassen einer Gruppe. Für UnitTests kann die Factory einfach simuliert werden und die Wartbarkeit des Codes ist gewährleistet.


Weitere Entwurfsmuster