620 Stimmen

Was sind die Unterschiede zwischen den Entwurfsmustern Abstract Factory und Factory?

Ich weiß, dass es viele Beiträge über die Unterschiede zwischen diesen beiden Mustern gibt, aber es gibt ein paar Dinge, die ich nicht finden kann.

Aus dem, was ich gelesen habe, sehe ich, dass die Fabrik-Methode Muster ermöglicht es Ihnen zu definieren, wie ein einzelnes konkretes Produkt zu schaffen, sondern versteckt die Umsetzung aus dem Client, wie sie ein generisches Produkt sehen wird. Meine erste Frage bezieht sich auf die abstrakte Fabrik. Erlaubt sie die Erstellung von Familien konkreter Objekte (die von der verwendeten Fabrik abhängen können) und nicht nur eines einzelnen konkreten Objekts? Gibt die abstrakte Fabrik nur ein sehr großes Objekt zurück oder viele Objekte, je nachdem, welche Methoden Sie aufrufen?

Meine letzten beiden Fragen beziehen sich auf ein einziges Zitat, das ich nicht ganz verstehe und das ich an zahlreichen Stellen gesehen habe:

Ein Unterschied zwischen den beiden ist, dass mit dem abstrakten Fabrikmuster, eine Klasse die Verantwortung für die Objektinstanziierung an ein anderes Objekt durch Komposition delegiert, während das Factory Methoden-Muster Vererbung verwendet und eine Unterklasse für die gewünschte gewünschten Objektinstanziierung.

Ich verstehe, dass das Factory-Methodenmuster eine Creator-Schnittstelle hat, die den ConcreteCreator wissen lässt, welches ConcreteProduct er instanziieren soll. Ist es das, was mit der Verwendung von Vererbung zur Handhabung der Objektinstanziierung gemeint ist?

Wie genau delegiert das Muster der abstrakten Fabrik die Verantwortung für die Instanziierung eines Objekts über die Komposition an ein anderes Objekt, um sich auf dieses Zitat zu beziehen? Was ist damit gemeint? In meinen Augen sieht es so aus, als ob das Abstract Factory-Muster auch die Vererbung nutzt, um den Konstruktionsprozess durchzuführen, aber auch hier bin ich noch dabei, etwas über diese Muster zu lernen.

Für jede Hilfe, insbesondere bei der letzten Frage, wäre ich sehr dankbar.

1voto

Islam Alshnawey Punkte 532

A) Fabrik-Methoden-Muster

Die Factory-Methode ist ein Entwurfsmuster, das eine Schnittstelle für die Erstellung von Objekten bietet, es aber Unterklassen erlaubt, den Typ eines zu erstellenden Objekts zu ändern.

Wenn Sie eine Erstellungsmethode in der Basisklasse und Unterklassen haben, die diese erweitern, könnten Sie sich die Factory-Methode ansehen.

B)Abstraktes Fabrikmuster

Die abstrakte Fabrik ist ein Entwurfsmuster, das die Erstellung von Familien verwandter oder abhängiger Objekte ermöglicht, ohne deren konkrete Klassen zu spezifizieren.

Was sind die "Familien von Objekten"? Nehmen wir zum Beispiel diese Gruppe von Klassen: Transport + Motor + Steuerungen. Davon kann es mehrere Varianten geben:

1- Auto + Verbrennungsmotor + Lenkrad

2-Flugzeug + JetEngine + Joch

Wenn Ihr Programm nicht mit Produktfamilien arbeitet, dann brauchen Sie keine abstrakte Fabrik.

Und wieder verwechseln viele Leute das abstrakte Fabrikmuster mit einer einfachen, als abstrakt deklarierten Fabrikklasse. Tun Sie das nicht!

REF: https://refactoring.guru/design-patterns/factory-comparison

0voto

he9lin Punkte 53

Ich würde jederzeit Abstract Factory gegenüber Factory Method vorziehen. Anhand des obigen Beispiels von Tom Dalling (übrigens eine großartige Erklärung) können wir sehen, dass Abstract Factory besser zusammensetzbar ist, da wir nur eine andere Factory an den Konstruktor übergeben müssen (hier wird Constructor Dependency Injection verwendet). Bei der Factory-Methode hingegen müssen wir eine neue Klasse einführen (was mehr Verwaltungsaufwand bedeutet) und eine Unterklasse verwenden. Ziehen Sie Komposition immer der Vererbung vor.

0voto

Atul Jain Punkte 837

Abstrakte Fabrik : Eine Fabrik der Fabriken; eine Fabrik, die einzelne, aber verwandte/abhängige Fabriken zusammenfasst, ohne ihre konkreten Klassen zu spezifizieren. Beispiel für eine abstrakte Fabrik

Fabrik : Sie bietet eine Möglichkeit, die Instanziierungslogik an untergeordnete Klassen zu delegieren. Beispiel eines Fabrikmusters

-1voto

King Punkte 183

Erlauben Sie mir, es präzise zu formulieren. Die meisten Antworten haben schon erklärt, auch mit Diagrammen und Beispielen.

Meine Antwort wäre also nur ein Einzeiler. Meine eigenen Worte: "Ein abstraktes Fabrikmuster fügt die abstrakte Schicht über mehrere Fabrikmethodenimplementierungen hinzu. Das bedeutet, dass eine abstrakte Fabrik enthält oder zusammengesetzt ist ein oder mehrere Fabrikmethodenmuster"

-1voto

DSK Punkte 400

Abstraktes Fabrikentwurfsmuster mit Echtzeitbeispiel: Was ist ein abstraktes Fabrikentwurfsmuster? Es ähnelt dem Entwurfsmuster für Fabrikmethoden. Wir müssen dieses Muster verwenden, wenn wir mehrere Fabriken haben. In diesem Muster wird eine Gruppierung von Fabriken definiert. Sie haben die gleichen Vorteile wie die Factory-Muster. Die abstrakte Factory beruht auf der Komposition von Objekten, während die Factory-Methode sich mit der Vererbung beschäftigt. factory design pattern in java mit einem echtzeit-beispiel: was ist das factory design pattern? es wird meist in der objektorientierten programmierung verwendet. Es ist eines der Entwurfsmuster, bei dem es um die Erstellung von Instanzen geht. Clients erstellen das Objekt, ohne der Logik der Objekterstellung ausgesetzt zu sein. Es ist in verschiedenen Frameworks weit verbreitet, z. B. im Spring-Framework. Wir verwenden dieses Muster, wenn die Klasse die Objekte einer anderen nicht kennt, die sie erstellen muss. Echtzeit-Beispiel: Wenn unser Auto auf der Straße eine Panne hat. Wir müssen den Mechaniker darüber informieren, welche Art von Fahrzeug wir benutzen, so dass der Mechaniker Werkzeuge für die Reparatur mit sich führt. Es gibt einige eingebaute Methoden, die diese Muster verwenden. Beispiel: getInstance()-Methode in der Klasse JavaUtilcalendar. Mit Hilfe von getInstance() können wir Objekte erhalten, wenn wir diese Methode ausführen. Javautilcalendar : getInstance() ist eine Methode, die ein Objekt zurückgibt. https://trendydevx.com/factory-design-pattern-in-java-with-realtime-example/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X