Definition: Bietet eine Schnittstelle zum Erstellen einer Reihe verwandter oder voneinander abhängiger Objekte, ohne deren konkrete Klassen anzugeben.
Typ: Erstellen Sie Klassenmusterklassendiagramm:
Der Unterschied zwischen abstraktem Fabrikmuster und Fabrikmethodenmuster
Das abstrakte Werksmuster ist eine aktualisierte Version des Fabrikmethodenmusters, mit dem eine Reihe verwandter oder voneinander abhängiger Objekte erstellt werden. Der Unterschied zwischen IT und dem Factory -Methode -Modell besteht darin, dass das Factory -Methodenmodell eine Produkthierarchiestruktur abzielt. während das abstrakte Werksmodell auf mehrere Produkthierarchiestrukturen abzielt. In der Programmierung manifestiert sich eine Produktstruktur normalerweise als Schnittstelle oder abstrakte Klasse. Das heißt, alle vom Factory -Methodenmodell bereitgestellten Produkte stammen aus derselben Schnittstelle oder abstrakte Klasse, während die vom abstrakten Fabrikmodell bereitgestellten Produkte aus einer verschiedenen Schnittstelle oder abstrakten Klasse abgeleitet werden.
Im abstrakten Fabrikmodell gibt es ein Konzept der Produktfamilie: Die sogenannte Produktfamilie bezieht sich auf eine Produktfamilie, die aus funktional verwandten Produkten in verschiedenen Produkthierarchien besteht. Die Serie von Produkten, die vom abstrakten Werksmodell bereitgestellt werden, bildet eine Produktfamilie; Während die von der Fabrikmethode bereitgestellte Produkte als hierarchische Struktur bezeichnet wird. Wir verwenden immer noch das Beispiel, um Autos zu produzieren, um den Unterschied zwischen ihnen zu veranschaulichen.
In dem obigen Klassendiagramm werden Schrägheck und Limousine als zwei verschiedene hierarchische Strukturen bezeichnet; Während 2.0 Verschiebungsfahrzeuge und 2.4 Verschiebungsfahrzeuge als zwei verschiedene Produktfamilien bezeichnet werden. Um genauer zu sein, gehören das 2,0-Verschiebungs-Schrägheck und das Schrägheck für 2,4-Ablagerungen zur gleichen Ebene der Niveau, die 2,0-Verschiebungs-Limousine und die 2,4-Verschiebungs-Limousine gehören zu einer anderen Struktur; Während die 2,0-Verwirkungs-Schrägheck und die 2,0-Verschiebungs-Limousine zur gleichen Produktfamilie und die 2,4-Verschiebungs-Schrägheck und die 2,4-Verschiebungs-Limousine zu einer anderen Produktfamilie gehören.
Sobald Sie die Konzepte der hierarchischen Struktur und der Produktfamilie verstanden haben, werden Sie den Unterschied zwischen dem Factory -Methodenmodell und dem abstrakten Fabrikmodell verstehen. Wenn alle Produkte der Fabrik zur gleichen hierarchischen Struktur gehören, gehören sie zum Fabrikmethodemodell; Wenn die Produkte der Fabrik aus mehreren hierarchischen Strukturen stammen, gehören sie zum abstrakten Fabrikmodell. In diesem Beispiel, wenn ein Fabrikmodell ein 2,0 -Verschiebungs -Schrägheck- und ein 2,4 -Verschiebungs -Schrägheckback bereitstellt, gehört es zum Factory -Methodenmodell. Wenn ein Fabrikmodell zwei Produkte, 2,4 Verschiebungsblitz und eine 2,4 -Verdrängungs -Limousine liefert, ist dieses Werksmodell ein abstraktes Werksmodell, da die Produkte, die es bereitstellt, zu zwei verschiedenen hierarchischen Strukturen gehören. Wenn eine Fabrik Produkte aller vier Modelle anbietet, da die Produkte zu zwei hierarchischen Strukturen gehören, wird es natürlich auch zum abstrakten Fabrikmodell gehören.
Beispiel
Schauen wir uns das Beispiel für abstrakte Klassen der Fabrikklasse an:
Paket AbstractFactory; public Abstract Class AbstractCreator {// Erstellen einer Produktmethode Public Abstract AbstractProducta CreateProducta (); // Erstellen von B -Produktmethode Public Abstract AbstractProductB CreateProductb ();}Abstrakte Klasse von Produkt a
Paket AbstractFactory; public Abstract Class AbstractProducta {// Methode, die von Product ein public void Sharemethod () {System.out.println ("Business Logic Processing -Methode von Product A ...") geteilt wird; } // Methode verschiedene Subprodukte von Produkten ein öffentliches abstraktes void-dosen (); }Zusammenfassung Klasse von Produkt B
Paket AbstractFactory; public Abstract Class AbstractProductB {// Methode, die von Produkt B public void Sharemethod () {System.out.println ("Business Logic Processing -Methode von Produkt B ...") geteilt wird; } // verschiedene Unterprodukte des Produkts b public abstract void dosomething (); } Fabrik -Implementierungsklasse Paket AbstractFactory; öffentliche Klasse Creator1 erweitert AbstractCreator {@Override public crectproducta createProducta () {return New Producta1 (); } @Override public crectProductB CreateProductB () {return New ProductB1 (); }} Fabrik -Implementierungsklasse Paket AbstractFactory; öffentliche Klasse Creator2 erweitert AbstractCreator {@Override public crectproducta createProducta () {return New Producta2 (); } @Override public AbstractProductB CreateProductB () {return New ProductB2 (); }}Produkt A1
Paket AbstractFactory; public class Producta1 erweitert AbstractProducta {@Override public void doSomething () {System.out.println ("Geschäftslogikverarbeitungsmethode des Produkts A1 ..."); }}Produkt A2
Paket AbstractFactory; public class Producta2 erweitert AbstractProducta {@Override public void doSomething () {System.out.println ("Business Logic Processing -Methode des Produkts A2 ..."); }}Produkt B1
Paket AbstractFactory; public class ProductB1 erweitert AbstractProductB {@Override public void doSomething () {System.out.println ("B1 -Geschäftslogikverarbeitungsmethode ..."); }}Produkt B2
Paket AbstractFactory; public class ProductB2 erweitert AbstractProductb {@Override public void doSomething () {System.out.println ("B2 -Geschäftslogikverarbeitungsmethode ..."); }} Vorteile des abstrakten Fabrikmusters
Neben den Vorteilen des Fabrikmethodemodells ist der wichtigste Vorteil, dass die Produktfamilie innerhalb der Klasse eingeschränkt werden kann. Die sogenannte Produktfamilie hat im Allgemeinen eine bestimmte Beziehung in größerem oder geringerem Maße. Das abstrakte Fabrikmodell kann die Beziehung zwischen der Produktfamilie innerhalb der Klasse definieren und beschreiben, ohne eine neue Klasse speziell für das Management vorzustellen.
Nachteile des abstrakten Fabrikmusters
Die Erweiterung der Produktfamilie wird eine sehr mühsame Aufgabe sein. Wenn der Produktfamilie ein neues Produkt hinzugefügt werden muss, müssen fast alle Fabrikklassen geändert werden. Bei Verwendung des abstrakten Fabrikmodells ist die Aufteilung der Produkthierarchiestruktur daher sehr wichtig.
Anwendbare Szenarien
Abstrakte Fabrikmuster können verwendet werden, wenn die zu erstellenden Objekte eine Reihe von miteinander verbundenen oder voneinander abhängigen Produktfamilien sind. Um es klarer auszudrücken, in einem Vererbungssystem, wenn es mehrere hierarchische Strukturen gibt (dh mehrere abstrakte Klassen existieren), und bestimmte Korrelationen oder Einschränkungen zwischen Implementierungsklassen, die in jede hierarchische Struktur unterteilt sind, kann das abstrakte Fabrikmodell verwendet werden. Es ist angemessener, mehrere unabhängige Fabriken zu verwenden, um Produkte zu erstellen, wenn in jeder Hierarchie keine Assoziationen oder Einschränkungen zwischen Implementierungsklassen vorhanden sind.
Zusammenfassen
Egal, ob es sich um das einfache Fabrikmodell, das Factory -Methodenmodell oder das abstrakte Fabrikmodell handelt, sie gehören alle zum Werksmodell und sind in Form und Eigenschaften sehr ähnlich. Ihr ultimatives Ziel ist es, zu entkoppeln. Bei der Verwendung müssen wir uns nicht darum kümmern, ob es sich bei diesem Muster um die Werksmethode oder das abstrakte Fabrikmodell handelt, da die Entwicklung zwischen ihnen oft schwer zu verstehen ist. Oft werden Sie feststellen, dass wenn eine neue Anforderung erfolgt, eine kleine Änderung vorgenommen wird und eine neue Methode hinzugefügt wird, die Produkte in der Klassenfamilie in verschiedenen hierarchischen Strukturen zum abstrakten Fabrikmodell bilden. Und für das abstrakte Fabrikmodell, wenn eine Methode reduziert wird, um die bereitgestellten Produkte nicht mehr zur Produktfamilie zu bilden, entwickelt sie sich zum Factory -Methodenmodell.
Wenn Sie den Werksmodus verwenden, müssen Sie sich daher nur darum kümmern, ob der Zweck der Reduzierung der Kopplung erreicht wurde.