Die Quelle für diese Informationen stammt aus: http://java.dzone.com/news/intro-design-patterns-abstract
Abstrakte Fabrik vs. Fabrikmethode
Die Methoden einer abstrakten Fabrik werden als Fabrikmethoden implementiert. Sowohl das Abstract Factory Pattern als auch das Factory Method Pattern entkoppeln das Client-System von den eigentlichen Implementierungsklassen durch die abstrakten Typen und Fabriken. Die Factory-Methode erzeugt Objekte durch Vererbung, während die Abstract Factory Objekte durch Komposition erzeugt.
Das Abstract Factory Pattern besteht aus einer AbstractFactory, ConcreteFactory, AbstractProduct, ConcreteProduct und Client.
Wie man sie umsetzt
Das Abstract Factory Pattern kann mit dem Factory Method Pattern, dem Prototype Pattern oder dem Singleton Pattern implementiert werden. Das ConcreteFactory-Objekt kann als Singleton implementiert werden, da nur eine Instanz des ConcreteFactory-Objekts benötigt wird.
Das Factory Method-Muster ist eine vereinfachte Version des Abstract Factory-Musters. Das Factory Method-Muster ist für die Erstellung von Produkten zuständig, die zu einer Familie gehören, während das Abstract Factory-Muster mehrere Produktfamilien behandelt.
Factory Method verwendet Schnittstellen und abstrakte Klassen, um den Client von der Generatorklasse und den daraus resultierenden Produkten zu entkoppeln. Abstract Factory hat einen Generator, der ein Container für mehrere Factory-Methoden ist, sowie Schnittstellen, die den Client vom Generator und den Produkten entkoppeln.
Wann wird das Factory-Methoden-Muster verwendet?
Verwenden Sie das Factory Method-Muster, wenn ein Client von einem bestimmten Produkt, das er verwendet, entkoppelt werden soll. Verwenden Sie die Factory-Methode, um einen Client von der Verantwortung für das Erstellen und Konfigurieren von Instanzen eines Produkts zu entlasten.
Wann wird das abstrakte Fabrikmuster verwendet?
Verwenden Sie das Abstract Factory Pattern, wenn Clients von Produktklassen entkoppelt werden müssen. Dies ist besonders nützlich für die Programmkonfiguration und -änderung. Das Abstract Factory-Muster kann auch Beschränkungen darüber auferlegen, welche Klassen mit anderen verwendet werden müssen. Es kann eine Menge Arbeit sein, neue konkrete Fabriken zu erstellen.
Beispiele:
Abstrakte Fabrik Beispiel 1
Diese Spezifikation für die Scheiben zur Zubereitung verschiedener Nudelsorten in einer Nudelmaschine ist die Abstrakte Fabrik, und jede spezifische Scheibe ist eine Fabrik. Alle Fabriken (Nudelmaschinen-Scheiben) erben ihre Eigenschaften von der abstrakten Fabrik. Jede einzelne Platte enthält die Information, wie die Nudeln zu erstellen sind, und der Pasta Maker nicht.
Abstrakte Fabrik Beispiel 2:
Das Stamping Equipment entspricht der Abstract Factory, denn es ist eine Schnittstelle für Operationen ist, die abstrakte Produktobjekte erzeugen. Die Matrizen entsprechen der Konkreten Fabrik, da sie ein konkretes Produkt erzeugen. Jede Teilekategorie (Motorhaube, Tür usw.) entspricht dem abstrakten Produkt. Spezifische Teile (z. B. Fahrertür für 99 Camry) entsprechen den den konkreten Produkten.
Beispiel für eine Fabrikmethode:
Die Spielzeugfirma entspricht dem Schöpfer, da sie die Fabrik zur Herstellung von Produktobjekten nutzen kann. Die Abteilung des Spielzeugunternehmens, die eine bestimmte Art von Spielzeug (Pferd oder Auto) herstellt, entspricht dem ConcreteCreator.
14 Stimmen
Meiner Meinung nach ist die Qualität der Antworten in Unterschiede zwischen abstraktem Factory-Muster und Factory-Methode sind viel besser als die hier.
1 Stimmen
Der Hauptunterschied besteht darin, dass die Factory-Methode die Vererbung verwendet (die Indirektion ist vertikal, z. B.
createThing()
) und Abstract Factory verwendet Komposition (die Indirektion ist horizontal, z. B.getFactory().createThing()
)1 Stimmen
Diese Frage ist nicht das, was einige ihrer Beantworter denken. Verpassen Sie nicht Tengis' Antwort die die drei unterschiedlichen Begriffe Factory, Abstract Factory und Factory Method definiert.