einführen
Ähnlich wie im Erstellungsmodus müssen beim Erstellen eines Objekts (als Produkt in der Fabrik angesehen) nicht die spezifische Klasse angeben, um das Objekt zu erstellen.
Das Werksmuster definiert eine Schnittstelle zum Erstellen von Objekten, und diese Schnittstelle wird von der Unterklasse festgelegt, um die Klasse zu instanziieren. Dieses Muster verzögert die Instanziierung einer Klasse auf eine Unterklasse. Unterklassen können Schnittstellenmethoden überschreiben, um beim Erstellen ihres eigenen Objekttyps anzugeben.
Dieser Modus ist sehr nützlich, insbesondere beim Erstellen von Prozesszuweisungen für Objekte, z. B. auf viele Einstellungsdateien. Außerdem sehen Sie häufig Fabrikmethoden in Ihrem Programm, damit die Unterklasse -Klasse den erstellten Objekttyp definiert.
Text
Im folgenden Beispiel eine verbesserte Version des Konstruktor -Mustercode in Kapitel 26 unter Verwendung der Werksmethode:
Die Codekopie lautet wie folgt:
var car = (function () {
var Car = Funktion (Modell, Jahr, Meilen) {
this.model = Modell;
this.year = Jahr;
this.miles = Meilen;
};
Rückgabefunktion (Modell, Jahr, Meilen) {
Neues Auto zurückgeben (Modell, Jahr, Meilen);
};
}) ();
Var Tom = New Car ("Tom", 2009, 20000);
var dudu = neues Auto ("Dudu", 2010, 5000);
Wenn es schwer zu verstehen ist, geben wir ein anderes Beispiel:
Die Codekopie lautet wie folgt:
var productManager = {};
productManager.CreateProducta = function () {
console.log ('producta');
}
productManager.CreateProductb = function () {
console.log ('productB');
}
productManager.factory = function (Typetyp) {
Neue ProductManager [Typetyp] zurückgeben;
}
ProductManager.Factory ("CreateProducta");
Wenn wir es noch nicht verstehen, lassen Sie uns detaillierter sein. Wenn wir einige Elemente in die Webseite einfügen möchten und diese Elemente nicht in Typen festgelegt sind, können sie Bilder, Verbindungen oder sogar Text sein. Nach der Definition des Fabrikmusters müssen wir die Fabrikklasse und die entsprechende Unterklasse definieren. Definieren wir zunächst die spezifische Implementierung der Unterklasse (dh der Unterfunktion):
Die Codekopie lautet wie folgt:
var page = Seite || {};
Page.dom = Page.dom || {};
// Unterfunktion 1: Textverarbeitungstext
page.dom.text = function () {
this.insert = function (wo) {
var txt = document.createTextNode (this.Url);
Wo.AppendChild (txt);
};
};
// Unterfunktion 2: Verarbeitungsverbindung
page.dom.link = function () {
this.insert = function (wo) {
var link = document.createelement ('a');
link.href = this.url;
link.AppendChild (document.CreateTextNode (this.url));
wo.Appendchild (link);
};
};
// Unterfunktion 3: Bilder verarbeiten
page.dom.image = function () {
this.insert = function (wo) {
var im = document.createelement ('img');
im.src = this.url;
wo.appendchild (im);
};
};
Wie definieren wir die Fabrikverarbeitungsfunktionen? Es ist eigentlich sehr einfach:
Die Codekopie lautet wie folgt:
page.dom.factory = function (type) {
Neue Seite zurückgeben.Dom [Typ];
}
Wie man es benutzt, ist wie folgt:
Die Codekopie lautet wie folgt:
var o = page.dom.factory ('link');
o.url = 'http://www.cnblogs.com';
O.Insert (document.body);
Zu diesem Zeitpunkt glaube ich, dass jeder die Einführung des Fabrikmodells bereits verstanden hat, also werde ich es nicht mehr beschreiben.
Zusammenfassen
Wann kann der Werksmodus verwendet werden
Das Werksmodell ist in den folgenden Szenarien besonders nützlich:
1. Die Konstruktion von Objekten ist sehr komplex
2. Sie müssen sich auf die spezifische Umgebung verlassen, um verschiedene Instanzen zu erstellen
3.. Behandeln Sie eine große Anzahl kleiner Objekte mit denselben Attributen
Wann sollte der Fabrikmodus nicht verwendet werden?
Missbrauche das Fabrikmodell nicht, manchmal verleiht es dem Code nur unnötige Komplexität und macht es schwierig, den Test durchzuführen.