Fabrikmuster
Das Fabrikmuster ist eines der am häufigsten verwendeten Entwurfsmuster in Java. Es bietet eine Möglichkeit, Objekte zu erzeugen, wobei der Prozess der Objekterzeugung vom Prozess der Objektverwendung getrennt wird.
Das Fabrikmuster bietet eine Möglichkeit, Objekte zu erzeugen, ohne die konkrete zu erzeugende Klasse anzugeben.
Durch die Verwendung des Fabrikmusters kann die Objekterzeugungslogik in einer Fabrikklasse gekapselt werden, anstatt Objekte direkt im Client-Code zu instanziieren, was die Wartbarkeit und Erweiterbarkeit des Codes verbessert.
Arten von Fabrikmustern
1. Einfaches Fabrikmuster:
- Das einfache Fabrikmuster ist kein formales Entwurfsmuster, aber es ist die Grundlage des Fabrikmusters. Es verwendet eine einzelne Fabrikklasse, um verschiedene Objekte zu erzeugen, und bestimmt anhand der übergebenen Parameter, welcher Objekttyp erzeugt werden soll.
2. Fabrikmethode-Muster:
- Das Fabrikmethode-Muster definiert eine Schnittstelle zum Erzeugen von Objekten, überlässt es jedoch den Unterklassen zu entscheiden, welche Klasse instanziiert wird. Es verlagert die Objekterzeugung auf Unterklassen.
3. Abstraktes Fabrikmuster:
- Das abstrakte Fabrikmuster bietet eine Schnittstelle zum Erzeugen einer Familie zusammengehöriger oder voneinander abhängiger Objekte, ohne deren konkrete Klassen anzugeben.
summary
Absicht
Definiere eine Schnittstelle zum Erstellen von Objekten und lass Unterklassen entscheiden, welche konkrete Klasse instanziiert wird. Das Factory-Muster verlagert den Prozess der Objekterstellung auf Unterklassen.
Hauptsächlich gelöstes Problem
Das Problem der Schnittstellenauswahl.
Wann verwenden
Wenn wir unter verschiedenen Bedingungen unterschiedliche Instanzen erstellen müssen.
Lösung
Indem Unterklassen die Factory-Schnittstelle implementieren, wird ein abstraktes Produkt zurückgegeben.
Schlüsselcode
Der Prozess der Objekterstellung wird in Unterklassen implementiert.
Anwendungsbeispiel
- Automobilherstellung: Du brauchst ein Auto; du holst es einfach aus der Fabrik ab, ohne dich um den Herstellungsprozess und die interne Implementierung des Autos kümmern zu müssen.
- HibernateBeim Wechsel von Datenbanken musst du nur den Dialect und den Datenbank Driver ändern, um zwischen verschiedenen Datenbanken zu wechseln.
Vorteile
- Der Aufrufer muss nur den Namen des Objekts kennen, um es zu erstellen.
- Hohe Erweiterbarkeit: Wenn ein neues Produkt hinzugefügt werden muss, musst du nur eine Factory-Klasse erweitern.
- Die konkrete Implementierung des Produkts ist verborgen; der Aufrufer kümmert sich nur um die Produktschnittstelle.
Nachteile
Jedes Mal, wenn ein Produkt hinzugefügt wird, müssen eine konkrete Klasse und eine entsprechende Factory hinzugefügt werden, wodurch sich die Anzahl der Klassen im System vervielfacht und die Komplexität des Systems sowie die Abhängigkeit von konkreten Klassen zunimmt.
Anwendungsfall
- Protokollierung: Protokolle können auf einer lokalen Festplatte, in Systemereignissen, auf entfernten Servern usw. aufgezeichnet werden. Benutzer können wählen, wo die Protokolle aufgezeichnet werden.
- Datenbankzugriff: Wenn der Benutzer nicht weiß, welche Datenbank das endgültige System verwenden wird, oder wenn sich die Datenbank ändern kann.
- Framework-Design für die Verbindung zu einem Server.: Es ist notwendig, drei Protokolle zu unterstützen: "POP3", "IMAP", "HTTP". Diese drei Protokolle können als Produktklassen verwendet werden, die gemeinsam eine Schnittstelle implementieren.
Hinweise
Das Factory-Muster eignet sich für Szenarien, in denen komplexe Objekte erzeugt werden. Wenn das Objekt relativ einfach ist und mit `new` erstellt werden kann, besteht keine Notwendigkeit, das Factory-Muster zu verwenden. Die Verwendung des Factory-Musters führt eine Fabrikklasse ein und erhöht die Systemkomplexität.
Struktur
Das Factory-Muster umfasst die folgenden Hauptrollen:
- Abstraktes Produkt: Definiert die gemeinsame Schnittstelle oder abstrakte Klasse des Produkts. Es kann die Elternklasse oder Schnittstelle konkreter Produktklassen sein und die gemeinsamen Methoden von Produktobjekten festlegen.
- Konkretes Produkt: Implementiert die abstrakte Produktschnittstelle und definiert das spezifische Verhalten und die Eigenschaften eines konkreten Produkts.
- Abstrakte Fabrik: Deklariert abstrakte Methoden zum Erstellen von Produkten; sie kann eine Schnittstelle oder eine abstrakte Klasse sein. Sie kann mehrere Methoden zum Erstellen verschiedener Produkttypen haben.
- Konkrete Fabrik: Implementiert die abstrakte Fabrikschnittstelle und ist für das tatsächliche Erstellen konkreter Produktobjekte verantwortlich.
Implementierung
Wir werden eineShapeSchnittstelle und ImplementierungShapeDie Entitätsklasse der Schnittstelle erstellen. Der nächste Schritt ist, die Fabrikklasse zu definieren.ShapeFactory。
FactoryPatternDemoKlassenverwendungShapeFactory, umShapeObjekt zu erhalten. Es wirdShapeFactoryInformationen übergeben (CIRCLE / RECTANGLE / SQUARE), um den Typ des benötigten Objekts zu erhalten.

Schritt 1
eine Schnittstelle erstellen:
Shape.java
Schritt 2
Erstellen Sie konkrete Klassen, die die Schnittstelle implementieren.
Rectangle.java
Square.java
Circle.java
Schritt 3
Erstellen Sie eine Fabrik, die Objekte von Entitätsklassen basierend auf den angegebenen Informationen generiert.
ShapeFactory.java
Schritt 4
Verwenden Sie diese Factory, um Objekte von Entitätsklassen durch Übergeben von Typinformationen zu erhalten.
FactoryPatternDemo.java
Schritt 5
Führen Sie das Programm aus, Ausgabeergebnis:
Inside Circle::draw() method. Inside Rectangle::draw() method. Inside Square::draw() method.
Weitere verwandte Artikel
Weitere Erweiterungen