Java-Entwurfsmuster – Fabrikmuster
1. Das Factory-Muster stellt hauptsächlich eine Übergangsschnittstelle zum Erstellen von Objekten bereit, um den spezifischen Prozess der Objekterstellung abzuschirmen und zu isolieren, um den Zweck der Verbesserung der Flexibilität zu erreichen.
Factory-Muster sind in „Java und Muster“ in drei Kategorien unterteilt:
1) Einfaches Factory-Muster (Simple Factory): Nicht förderlich für die Erstellung eines Serie von Produkten;
2) Fabrikmethode: auch als polymorphe Fabrik bekannt; neue Produkte;
Diese drei Modi werden schrittweise von oben nach unten abstrahiert und sind allgemeiner.
GOF hat das Fabrikmuster im Buch „Design Patterns“ in zwei Kategorien unterteilt: Fabrikmethodenmuster (Fabrikmethode) und abstraktes Fabrikmuster (Abstrakte Fabrik). Stellen Sie sich das Muster „Simple Factory“ als Sonderfall des Musters „Factory Method“ vor, und beide werden derselben Kategorie zugeordnet.
2. Einfaches Fabrikmuster
Einfaches Fabrikmuster wird auch als statisches Fabrikmethodenmuster bezeichnet. Aus der Umbenennung ist ersichtlich, dass dieser Modus sehr einfach sein muss. Sein Zweck ist einfach: eine Schnittstelle zum Erstellen von Objekten zu definieren.
Werfen wir zunächst einen Blick auf seine Zusammensetzung:
1) Fabrikrolle: Dies ist der Kern dieses Modells und enthält bestimmte Geschäftslogik und Beurteilungslogik. In Java wird es oft durch eine konkrete Klasse implementiert.
2) Abstrakte Produktrolle: Es handelt sich im Allgemeinen um die übergeordnete Klasse, die von einem bestimmten Produkt oder der implementierten Schnittstelle geerbt wird. Es wird in Java über eine Schnittstelle oder eine abstrakte Klasse implementiert.
3) Spezifische Produktrolle: Das von der Factory-Klasse erstellte Objekt ist eine Instanz dieser Rolle. Implementiert durch eine konkrete Klasse in Java.
3. Factory-Methodenmuster
Werfen wir einen Blick auf seine Zusammensetzung:
1) Abstrakte Fabrikrolle: Dies ist der Kern des Fabrikmethodenmusters und hat nichts mit der Anwendung zu tun. Es handelt sich um die Schnittstelle, die eine bestimmte Factory-Rolle implementieren muss, oder um die übergeordnete Klasse, die geerbt werden muss. In Java wird es durch abstrakte Klassen oder Schnittstellen implementiert.
2) Spezifische Factory-Rolle: Sie enthält Code, der sich auf eine bestimmte Geschäftslogik bezieht. Wird von einer Anwendung aufgerufen, um ein Objekt zu erstellen, das einem bestimmten Produkt entspricht.
3) Abstrakte Produktrolle: Es handelt sich um die übergeordnete Klasse, die von einem bestimmten Produkt oder der implementierten Schnittstelle geerbt wird. In Java müssen im Allgemeinen abstrakte Klassen oder Schnittstellen implementiert werden.
4) Spezifische Produktrolle: Das von der spezifischen Factory-Rolle erstellte Objekt ist eine Instanz dieser Rolle. Es wird durch bestimmte Klassen in Java implementiert.
Das Fabrikmethodenmuster verwendet mehrere von der abstrakten Fabrikrolle geerbte Unterklassen, um die „Gottklasse“ im einfachen Fabrikmuster zu ersetzen. Wie oben erwähnt, wird dadurch der Druck auf das Objekt geteilt, und dies macht die Struktur flexibel – wenn ein neues Produkt (d. h. das Auto des Emporkömmlings) produziert wird, sofern es gemäß der abstrakten Produktrolle und der abstrakten Fabrikrolle bereitgestellt wird generiert, die dann von Kunden genutzt werden können, ohne dass vorhandener Code geändert werden muss. Es ist ersichtlich, dass auch die Struktur der Fabrikrolle dem Öffnungs- und Schließprinzip entspricht!
Code:
//抽象产品角色 public interface Moveable { void run(); } //具体产品角色 public class Plane implements Moveable { @Override public void run() { System.out.println("plane...."); } } public class Broom implements Moveable { @Override public void run() { System.out.println("broom....."); } } //抽象工厂 public abstract class VehicleFactory { abstract Moveable create(); } //具体工厂 public class PlaneFactory extends VehicleFactory{ public Moveable create() { return new Plane(); } } public class BroomFactory extends VehicleFactory{ public Moveable create() { return new Broom(); } } //测试类 public class Test { public static void main(String[] args) { VehicleFactory factory = new BroomFactory(); Moveable m = factory.create(); m.run(); } }
Es ist ersichtlich, dass durch das Hinzufügen von Factory-Methoden die Anzahl der Objekte verdoppelt wurde. Wenn es viele Produkttypen gibt, wird eine große Anzahl entsprechender Fabrikobjekte angezeigt, was nicht das ist, was wir wollen. Denn wenn sich diese Situation nicht vermeiden lässt, können Sie eine Kombination aus dem einfachen Factory-Muster und dem Factory-Methodenmuster in Betracht ziehen, um Factory-Klassen zu reduzieren: Das heißt, Sie verwenden eine einfache Factory für ähnliche Typen im Produktbaum (normalerweise Brüder unter den Blättern von). der Baum) Muster zu erreichen.
4. Vergleich zwischen einfachen Factory- und Factory-Methodenmustern
Der Unterschied in der Definition zwischen Factory-Methodenmustern und einfachen Factory-Mustern ist offensichtlich. Der Kern des Factory-Methodenmusters ist eine abstrakte Factory-Klasse, im Gegensatz zum einfachen Factory-Muster, bei dem der Kern auf einer realen Klasse liegt. Das Factory-Methodenmuster ermöglicht es vielen realen Factory-Klassen, von der abstrakten Factory-Klasse zu erben, was tatsächlich zu einer Synthese mehrerer einfacher Factory-Muster werden kann, wodurch das einfache Factory-Muster populär wird.
Andererseits ist das einfache Fabrikmuster vom Fabrikmethodenmuster degeneriert. Stellen Sie sich vor, wenn wir sehr sicher sind, dass ein System nur eine echte Factory-Klasse benötigt, dann könnten wir die abstrakte Factory-Klasse genauso gut mit der realen Factory-Klasse zusammenführen. Und auf diese Weise werden wir zum einfachen Fabrikmodell degradieren.
5. Abstraktes Fabrikmuster
Code:
//抽象工厂类 public abstract class AbstractFactory { public abstract Vehicle createVehicle(); public abstract Weapon createWeapon(); public abstract Food createFood(); } //具体工厂类,其中Food,Vehicle,Weapon是抽象类, public class DefaultFactory extends AbstractFactory{ @Override public Food createFood() { return new Apple(); } @Override public Vehicle createVehicle() { return new Car(); } @Override public Weapon createWeapon() { return new AK47(); } } //测试类 public class Test { public static void main(String[] args) { AbstractFactory f = new DefaultFactory(); Vehicle v = f.createVehicle(); v.run(); Weapon w = f.createWeapon(); w.shoot(); Food a = f.createFood(); a.printName(); } }
Im Abstrakten Fabrikmuster kann das abstrakte Produkt (AbstractProduct) eines oder mehrere sein und somit ein oder mehrere bilden Mehrere Produktfamilien. Bei nur einer Produktfamilie degeneriert das abstrakte Fabrikmuster tatsächlich zum Fabrikmethodenmuster.
6. Zusammenfassung.
(1) Das einfache Factory-Muster verwendet eine bestimmte Klasse, um Instanzen anderer Klassen zu erstellen. Die übergeordnete Klasse ist dieselbe und die übergeordnete Klasse ist spezifisch.
(2) Das Factory-Methodenmuster verfügt über eine abstrakte übergeordnete Klasse, die eine öffentliche Schnittstelle definiert, und die Unterklasse ist für die Generierung bestimmter Objekte verantwortlich. Der Zweck besteht darin, die Instanziierung der Klasse zur Unterklasse zu verzögern.
(3) Das abstrakte Factory-Muster bietet eine Schnittstelle zum Erstellen einer Reihe verwandter oder voneinander abhängiger Objekte, ohne deren spezifische Klassen anzugeben. Es zielt auf hierarchische Strukturen mit mehreren Produkten ab. Das Factory-Methodenmuster zielt auf die hierarchische Struktur eines Produkts ab.

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Fehlerbehebung und Lösungen für die Sicherheitssoftware des Unternehmens, die dazu führt, dass einige Anwendungen nicht ordnungsgemäß funktionieren. Viele Unternehmen werden Sicherheitssoftware bereitstellen, um die interne Netzwerksicherheit zu gewährleisten. ...

Lösungen zum Umwandeln von Namen in Zahlen zur Implementierung der Sortierung in vielen Anwendungsszenarien müssen Benutzer möglicherweise in Gruppen sortieren, insbesondere in einem ...

Die Verarbeitung von Feldzuordnungen im Systemdocken stößt häufig auf ein schwieriges Problem bei der Durchführung von Systemdocken: So kartieren Sie die Schnittstellenfelder des Systems und ...

Beginnen Sie den Frühling mit der Intellijideaultimate -Version ...

Konvertierung von Java-Objekten und -Arrays: Eingehende Diskussion der Risiken und korrekten Methoden zur Konvertierung des Guss-Typs Viele Java-Anfänger werden auf die Umwandlung eines Objekts in ein Array stoßen ...

Bei Verwendung von MyBatis-Plus oder anderen ORM-Frameworks für Datenbankvorgänge müssen häufig Abfragebedingungen basierend auf dem Attributnamen der Entitätsklasse erstellt werden. Wenn Sie jedes Mal manuell ...

Wie erkennt die Redis -Caching -Lösung die Anforderungen der Produktranking -Liste? Während des Entwicklungsprozesses müssen wir uns häufig mit den Anforderungen der Ranglisten befassen, z. B. das Anzeigen eines ...

Detaillierte Erläuterung des Designs von SKU- und SPU-Tabellen auf E-Commerce-Plattformen In diesem Artikel werden die Datenbankdesignprobleme von SKU und SPU in E-Commerce-Plattformen erörtert, insbesondere wie man mit benutzerdefinierten Verkäufen umgeht ...
