Heim  >  Artikel  >  Web-Frontend  >  Javascript-Designmuster-Theorie und Programmierpraxis, einfache Fabrikmuster_Javascript-Kenntnisse

Javascript-Designmuster-Theorie und Programmierpraxis, einfache Fabrikmuster_Javascript-Kenntnisse

WBOY
WBOYOriginal
2016-05-16 15:33:581227Durchsuche

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 🎜>

3. Objektklassen, verschiedene Klassen, die von verschiedenen Unternehmen generiert werden, sind die von der Fabrik hergestellten Produkte

Vorteile des einfachen Fabrikmodells

1. Die Factory-Klasse zentralisiert die Erstellung aller Objekte und ermöglicht so eine einheitliche Verwaltung der Objekterstellung


2. Der Benutzer des Objekts nutzt das Produkt nur und übernimmt eine einzige Verantwortung


3. Wenn ein neues Unternehmen hinzugefügt wird, müssen Sie nur die entsprechende Geschäftsobjektklasse und die Methode zur Erstellung des Geschäftsobjekts in der Factory-Klasse hinzufügen, und es besteht keine Notwendigkeit, andere Stellen zu ändern.

Anwendbare Szenarien

1. Verschiedene Instanzen müssen gemäß unterschiedlichen Parametern generiert werden, und diese Instanzen haben einige gemeinsame Szenarien


2. Benutzer müssen das Produkt nur verwenden und müssen nicht die Details der Produkterstellung kennen

Hinweis: Sofern es nicht auf das Szenario anwendbar ist, kann das Factory-Muster nicht missbraucht werden, was zu Codekomplexität führt.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn