Heim >Java >javaLernprogramm >JAVA-Designmuster, abstraktes Fabrikmuster
Wir haben bereits das einfache Fabrikmuster und das Fabrikmethodenmuster eingeführt. Hier werden wir weiterhin das dritte Fabrikmuster vorstellen – das abstrakte Fabrikmuster, wobei wir wiederum die Herstellung von Autos betrachten ein Beispiel.
Beispielhintergrund:
Da die Kundenanforderungen immer höher werden, erfordern BMW-Fahrzeuge unterschiedliche Konfigurationen von Klimaanlagen, Motoren und anderem Zubehör. Daher begann die Fabrik mit der Produktion von Klimaanlagen und Motoren für die Montage von Autos. Derzeit verfügt die Fabrik über zwei Produktserien: Klimaanlagen und Motoren. Die BMW 320-Serie ist mit einer Klimaanlage des Modells A und einem Motor des Modells A ausgestattet, und die BMW 230-Serie ist mit einer Klimaanlage des Modells B und einem Motor des Modells B ausgestattet.
Konzept:
Das abstrakte Fabrikmuster ist eine aktualisierte Version des Fabrikmethodenmusters. Es wird verwendet, um eine Reihe verwandter oder voneinander abhängiger Objekte zu erstellen. Beispielsweise verwendet die BMW 320-Serie das Klimaanlagenmodell A und das Motormodell A, während die BMW 230-Serie das Klimaanlagenmodell B und das Motormodell B verwendet. Bei der Herstellung von entsprechendem Zubehör für die 320-Serie gibt es dann das abstrakte Fabrikmuster Es ist nicht erforderlich, das Modell des Zubehörs anzugeben. Es wird automatisch das entsprechende Zubehörmodell A entsprechend dem Automodell erstellt.
Basierend auf der Einführung in das abstrakte Fabrikmuster in der Baidu-Enzyklopädie, kombiniert mit diesem Beispiel:
Wenn jedes abstrakte Produkt mehr als eine konkrete Unterklasse hat (Klimaanlagen haben die Modelle A und Es gibt zwei Typen von B, und die Engine hat auch zwei Typen: A und B). Woher weiß die Factory-Rolle, welche Unterklasse instanziiert werden soll? Beispielsweise verfügt jede abstrakte Produktrolle über zwei spezifische Produkte (das Produkt Klimaanlage verfügt über zwei spezifische Produkte, Klimaanlage A und Klimaanlage B). Das abstrakte Fabrikmuster stellt zwei spezifische Fabrikrollen bereit (BMW 320-Serienfabrik und BMW 230-Serienfabrik), die jeweils diesen beiden spezifischen Produktrollen entsprechen. Jede spezifische Fabrikrolle ist nur für die Instanziierung einer bestimmten Produktrolle verantwortlich. Jede konkrete Factory-Klasse ist nur für die Erstellung von Instanzen einer bestimmten Unterklasse des abstrakten Produkts verantwortlich.
Abstrakter Fabrikmustercode
Produktkategorie:
//发动机以及型号 public interface Engine { } public class EngineA extends Engine{ public EngineA(){ System.out.println("制造-->EngineA"); } } public class EngineBextends Engine{ public EngineB(){ System.out.println("制造-->EngineB"); } } //空调以及型号 public interface Aircondition { } public class AirconditionA extends Aircondition{ public AirconditionA(){ System.out.println("制造-->AirconditionA"); } } public class AirconditionB extends Aircondition{ public AirconditionB(){ System.out.println("制造-->AirconditionB"); } }
Fabrikklasse erstellen:
//创建工厂的接口 public interface AbstractFactory { //制造发动机 public Engine createEngine(); //制造空调 public Aircondition createAircondition(); } //为宝马320系列生产配件 public class FactoryBMW320 implements AbstractFactory{ @Override public Engine createEngine() { return new EngineA(); } @Override public Aircondition createAircondition() { return new AirconditionA(); } } //宝马523系列 public class FactoryBMW523 implements AbstractFactory { @Override public Engine createEngine() { return new EngineB(); } @Override public Aircondition createAircondition() { return new AirconditionB(); } }
Kunde:
public class Customer { public static void main(String[] args){ //生产宝马320系列配件 FactoryBMW320 factoryBMW320 = new FactoryBMW320(); factoryBMW320.createEngine(); factoryBMW320.createAircondition(); //生产宝马523系列配件 FactoryBMW523 factoryBMW523 = new FactoryBMW523(); factoryBMW320.createEngine(); factoryBMW320.createAircondition(); } }
Was den Unterschied zwischen dem abstrakten Fabrikmuster und dem Fabrikmethodenmuster betrifft, werde ich hier nicht näher darauf eingehen. Ich habe das Gefühl, dass Sie es verstehen können, wenn Sie die Beispiele mehrmals lesen. Es gibt auch viele erwähnte Konzepte Als Produktfamilie und hierarchische Struktur wird es schwieriger sein, darüber zu sprechen.
Der Ursprung des Abstrakten Fabrikmusters
Das Folgende ist ein Zitat vom Ursprung des Abstrakten Fabrikmusters:
Der Ursprung oder die früheste Anwendung des Abstrakten Fabrikmusters ist um Objekte zu erstellen, die zu verschiedenen Operationen gehören. Systemfensterkonstruktion. Beispiel: Die Befehlsschaltfläche (Button) und das Textfeld (Text) sind beide Fensterstrukturen. In der Fensterumgebung des UNIX-Betriebssystems und der Fensterumgebung des Windows-Betriebssystems haben diese beiden Strukturen unterschiedliche lokale Implementierungen Details sind unterschiedlich.
In jedem Betriebssystem gibt es eine Build-Familie, die aus Fenster-Builds besteht. Hier ist die Produktfamilie bestehend aus Button und Text. Jede Fensterkomponente bildet ihre eigene hierarchische Struktur mit einer abstrakten Rolle, die eine abstrakte Funktionsbeschreibung liefert, und konkreten Unterklassen, die spezifische Implementierungen unter verschiedenen Betriebssystemen bereitstellen.
Sie können feststellen, dass es im obigen Produktkategoriediagramm zwei hierarchische Produktstrukturen gibt, nämlich die hierarchische Schaltflächenstruktur und die hierarchische Textstruktur. Es gibt gleichzeitig zwei Produktfamilien, nämlich die UNIX-Produktfamilie und die Windows-Produktfamilie. Die UNIX-Produktfamilie besteht aus UNIX Button- und UNIX Text-Produkten; die Windows-Produktfamilie besteht aus Windows Button- und Windows Text-Produkten.
Die Anforderungen des Systems an die Erstellung von Produktobjekten werden durch die hierarchische Struktur eines Projekts erfüllt, in dem es zwei spezifische Projektrollen gibt, nämlich UnixFactory und WindowsFactory. Das UnixFactory-Objekt ist für die Erstellung von Produkten in der Unix-Produktfamilie verantwortlich, während das WindowsFactory-Objekt für die Erstellung von Produkten in der Windows-Produktfamilie verantwortlich ist. Dies ist die Anwendung des abstrakten Fabrikmusters. Die Lösung des abstrakten Fabrikmusters lautet wie folgt:
Natürlich kann ein System nur in der Fensterumgebung eines bestimmten Systems ausgeführt werden Betriebssystem und kann nicht gleichzeitig auf verschiedenen Betriebssystemen ausgeführt werden. Daher kann das System tatsächlich nur Produkte konsumieren, die zur gleichen Produktfamilie gehören.
In modernen Anwendungen wurde der Anwendungsbereich des abstrakten Fabrikmusters erheblich erweitert, und das System muss nicht mehr nur eine bestimmte Produktfamilie verbrauchen.
Zusammenfassung:
Ob es sich um ein einfaches Fabrikmuster, ein Fabrikmethodenmuster oder ein abstraktes Fabrikmuster handelt, sie alle gehören zum Fabrikmuster und sind in Form und Eigenschaften sehr ähnlich Die ultimativen Ziele sind dieselben. Es geht um die Entkopplung. Bei der Verwendung müssen wir uns keine Gedanken darüber machen, ob es sich bei diesem Muster um ein Fabrikmethodenmuster oder ein abstraktes Fabrikmuster handelt, da die Entwicklung zwischen ihnen oft verwirrend ist. Wenn neue Anforderungen auftreten, werden Sie häufig feststellen, dass das von Ihnen verwendete Factory-Methodenmuster leicht geändert wird und eine neue Methode hinzugefügt wird. Da die Produkte in der Klasse Produktfamilien in unterschiedlichen hierarchischen Strukturen darstellen, wird sie zur abstrakten Factory Wenn beim abstrakten Fabrikmuster eine Methode reduziert wird, sodass die bereitgestellten Produkte keine Produktfamilie mehr bilden, entwickelt sie sich zum Fabrikmethodenmuster.
Wenn Sie also das Fabrikmuster verwenden, müssen Sie sich nur darum kümmern, ob der Zweck der Reduzierung der Kopplung erreicht wird.
Weitere Artikel zum Abstract Factory Pattern von JAVA-Designmustern finden Sie auf der chinesischen PHP-Website!
Verwandte Artikel:
PHP einfaches Fabrikmuster, Fabrik Methodenmuster und abstrakte Fabrik Vergleich von Mustern