Die Factory-Methode ist ein kreatives Entwurfsmuster, d. H. Bezieht sich auf die Objekterstellung. Im Factory-Muster erstellen wir ein Objekt, ohne die Erstellungslogik dem Client zugänglich zu machen, und der Client verwendet dieselbe gemeinsame Schnittstelle, um einen neuen Objekttyp zu erstellen.
Die Idee besteht darin, eine statische Elementfunktion (statische Factory-Methode) zu verwenden, die & gibt Instanzen zurück und verbirgt die Details von Klassenmodulen vor dem Benutzer.
Ein Factory-Muster ist eines der zentralen Entwurfsprinzipien zum Erstellen eines Objekts, mit dem Clients Objekte erstellen können einer Bibliothek (siehe unten) so, dass sie nicht eng mit der Klassenhierarchie der Bibliothek gekoppelt ist.
Was ist gemeint, wenn wir über Bibliothek und Clients sprechen?
Eine Bibliothek wird von einem Drittanbieter bereitgestellt, der einige öffentliche APIs verfügbar macht, und Clients rufen diese öffentlichen APIs auf, um ihre Aufgabe abzuschließen. Ein sehr einfaches Beispiel können verschiedene Arten von Ansichten sein, die vom Android-Betriebssystem bereitgestellt werden.
Warum Factory-Muster?
Lassen Sie es uns anhand eines Beispiels verstehen:
Ausgabe:
I am two wheeler
Was sind die Probleme mit dem obigen Design?
Wie Sie im obigen Beispiel gesehen haben müssen, erstellt der Client Objekte von TwoWheeler oder FourWheeler basierend auf einigen Eingaben während der Erstellung des Objekts.
Angenommen, die Bibliothek führt eine neue Klasse von ThreeWheeler ein, die auch Dreiradfahrzeuge enthält. Was würde passieren? Der Client wird am Ende ein neues else verketten, wenn er sich in der bedingten Leiter befindet, um Objekte von ThreeWheeler zu erstellen. Dafür muss der Client neu kompiliert werden. Jedes Mal, wenn eine neue Änderung auf der Bibliotheksseite vorgenommen wird, muss der Client am Ende einige entsprechende Änderungen vornehmen und den Code neu kompilieren. Hört sich schlecht an? Dies ist eine sehr schlechte Designpraxis.
Wie vermeide ich das Problem?
Die Antwort lautet: Erstellen Sie eine statische (oder werkseitige) Methode. Sehen wir uns den folgenden Code an.
Ausgabe:
I am three wheeler
Im obigen Beispiel haben wir die Auswahl des Typs für die Objekterstellung vollständig vom Client entkoppelt. Die Bibliothek ist nun dafür verantwortlich, anhand einer Eingabe zu entscheiden, welcher Objekttyp erstellt werden soll. Der Client muss nur die Factory-Methode Create der Bibliothek aufrufen und den gewünschten Typ übergeben, ohne sich um die tatsächliche Implementierung der Erstellung von Objekten kümmern zu müssen.
Vielen Dank an Rumplestiltskin für die obige Erklärung.
Andere Beispiele für die Factory-Methode:
- Angenommen, in einem Zeichnungssystem können je nach Benutzereingabe verschiedene Bilder wie Quadrat, Rechteck oder Kreis gezeichnet werden. Hier können wir die Factory-Methode verwenden, um Instanzen abhängig von Benutzereingaben zu erstellen. Zum Hinzufügen eines neuen Formtyps muss der Kundencode nicht geändert werden.
- Ein weiteres Beispiel: Auf der Reiseseite können wir Zugfahrkarten sowie Bustickets und Flugtickets buchen. In diesem Fall kann der Benutzer seinen Reisetyp als „Bus“, „Zug“ oder „Flug“ angeben.
Hier haben wir eine abstrakte Klasse „AnyTravel“ mit einer statischen Elementfunktion „GetObject“, die je nach Reisetyp des Benutzers verwendet wird create & gibt das Objekt ‚BusTravel‘ oder ‚TrainTravel‘ zurück. „BusTravel“ oder „TrainTravel“ haben gemeinsame Funktionen wie Passagiername, Herkunft und Zielparameter.
Dank Abhijit Saha, der die ersten beiden Beispiele liefert.