Leseverzeichnis
Grundlegende Einführung
Nennen Sie Beispiele
Zusammenfassung
Das einfache Factory-Muster verwendet eine Methode, um zu bestimmen, welche Klasseninstanz erstellt werden soll, und diese Instanzen haben oft die gleiche Schnittstelle. Dieses Muster wird hauptsächlich verwendet, wenn der Typ, der instanziiert wird, nicht zur Kompilierungszeit bestimmt werden kann, sondern Situationen, die während der Ausführung entschieden werden Zeitraum. Vereinfacht ausgedrückt ist es wie mit dem Getränkeautomaten in der Speisekammer des Unternehmens. Je nachdem, welchen Knopf man drückt, möchte man Kaffee oder Milch.
Das einfache Factory-Muster ist auch beim Erstellen von Ajax-Objekten sehr nützlich.
Normalerweise verwenden wir zum Erstellen von Objekten am häufigsten das Schlüsselwort new, um den Konstruktor aufzurufen, was zu Abhängigkeiten zwischen Objekten führt. Das Factory-Muster ist ein Entwurfsmuster, das hilft, Abhängigkeiten zwischen Klassen zu beseitigen, indem es eine Methode verwendet, um zu entscheiden, welche Klasse instanziiert werden soll. In diesem Artikel wird die Theorie des einfachen Fabrikmusters ausführlich vorgestellt und die spezifische Anwendung des einfachen Fabrikmusters veranschaulicht.
Grundlegende Einführung
Das einfache Fabrikmuster ist das grundlegendste der Fabrikmuster. Durch die Definition einer Factory-Klasse wird eine bestimmte Produktklasse basierend auf Parametern instanziiert.
Beispiele
Nehmen wir zur Veranschaulichung ein Beispiel: Angenommen, wir entwickeln eine Website für die Tourismusbranche, die Flugtickets, Hotels und andere Produkte verkauft. Ein Benutzer ist bereit, ein Ticket zu kaufen. Wir können verwandte Klassen wie folgt definieren:
var productEnums = { flight: "flight", hotel: "hotel" }; function Flight() { console.log("This is Flight"); } function Hotel() { console.log("This is Hotel"); } function User() { this.shopCart = []; } User.prototype = { constructor: User, order: function (productType) { var product = null; switch (productType) { case productEnums.flight: product = new Flight(); case productEnums.hotel: product = new Hotel(); default: } this.shopCart.push(product); } } var user = new User(); user.order(productEnums.flight);
Dieser Code definiert drei Klassen: Benutzerklasse „Benutzer“, Ticketklasse „Flug“ und Hotelklasse „Hotel“, wobei „Benutzer“ die Buchungsmethode enthält. Der Benutzer kann bei der Reservierung direkt den Produkttyp eingeben. An diesem Code ist auf den ersten Blick nichts auszusetzen, aber die Bedürfnisse und das Geschäft können sich jederzeit ändern. Wenn das Geschäft des Unternehmens erweitert wird und Visa-Dienste hinzugefügt werden, müssen wir die Benutzerklasse ändern, um sicherzustellen, dass sie Visa unterstützt. Natürlich können wir das tun, aber was ist falsch daran, die User-Klasse direkt zu ändern?
Das erste, worüber ich sprechen möchte, ist die Benutzerklasse. Diese Klasse stellt die Benutzerklasse dar, und die Benutzerklasse ist für eine bestimmte Art von Geschäft im Wesentlichen irrelevant. aber der Benutzer hat nichts mit dem Geschäft zu tun. Der Code erstellt die Produktbestellung. Das neue Visa-Geschäft unterscheidet sich im Wesentlichen nicht von den bestehenden Flugtickets und Hotels. Wenn Sie die Benutzerklasse jedes Mal ändern müssen, wenn Sie ein Unternehmen hinzufügen, wirkt sich dies stark auf die Stabilität und Wartbarkeit des Codes aus Es gibt eine spezielle Klasse zur Auftragserstellung, um verschiedene Unternehmen zu verwalten. Diese Klasse ist eine einfache Fabrik.
Wir ändern den Code wie folgt:
var productFactory = (function () { var productFactories = { "flight": function () { return new Flight(); }, "hotel": function () { return new Hotel(); } }; return { createProduct: function (productType) { return productFactories[productType](); } } })(); User.prototype = { constructor: User, order: function (productType) { this.shopCart.push(productFactory.createProduct(productType)); } }
Es gibt zwei Hauptänderungen an diesem Code:
(1) Eine Produktfabrik hinzugefügt, um je nach Produkttyp unterschiedliche Objekte zurückzugeben
(2) Ändern Sie die Order-Methode der User-Klasse, um die Create-Product-Methode in der Factory-Klasse aufzurufen.
Dies hat folgende Vorteile:
(1) Fokussieren Sie die Bestellmethode des Benutzers, indem Sie nur die Funktion zum Buchen von Produkten und zum Extrahieren und Erstellen von Produktbestellungen in einer speziellen Fabrikklasse ausführen, wodurch der Code prägnanter und klarer wird
(2) Eine Fabrik, die sich der Verwaltung von Produkten widmet. Es ist einfach, neue Produkte hinzuzufügen, ohne die Benutzerklasse zu ändern
Zusammenfassung
Das Hauptmerkmal des einfachen Fabrikmusters besteht darin, die Erstellung und Verwendung von Objekten zu trennen. Es besteht hauptsächlich aus drei Teilen:
1. Das Objekt verwendet eine Klasse, die ein von der Fabrik erstellter Benutzer ist und nichts mit dem Typ und dem Erstellungsprozess des Objekts zu tun hat
2. Die Factory-Klasse erstellt verschiedene Objekte basierend auf den übergebenen Parametern und gibt sie an das Objekt zurück. Wenn es verschiedene Objekte gibt, muss die Klasse geändert werden 🎜>
Vorteile des einfachen Fabrikmodells
Anwendbare Szenarien
Hinweis: Sofern es nicht auf das Szenario anwendbar ist, kann das Factory-Muster nicht missbraucht werden, was zu Codekomplexität führt.