Bevor Sie diesen Artikel lesen, wird empfohlen, diesen Artikel zu lesen: Singleton-Modus von JavaScript-Designmustern. Schließlich bin ich persönlich der Meinung, dass es besser ist, Schritt für Schritt vorzugehen.
Das Fabrikmuster wird in ein einfaches Fabrikmuster und ein komplexes Fabrikmuster unterteilt, um eine Instanz zu generieren, normalerweise ein Singleton. Letzteres verwendet eine Unterklasse, um zu bestimmen, von welcher Klasse eine bestimmte Instanz ist Fabrik enthält komplexe Fabriken.
Lassen Sie uns anhand eines konkreten Beispiels ausführlich über diese Fabrik sprechen.
Die Verwendung der Ajax-Technologie zum Initiieren asynchroner Anforderungen ist heutzutage eine häufige Aufgabe in der Webentwicklung.
1 // implementiert AjaxHandler und erstellt eine komplexe Fabrik zur Ausführung einer Reihe von Ajax-Prozessen, die zwei einfache Fabriken enthält
2 var SimpleHandler = function(){};
3
4 SimpleHandler.prototype = {
5 // Die erste einfache Factory führt die Ajax-Erstellung, -Anfrage und -Sendung durch. . . Warten
6 request:function(method,url,callback,postVars){
7 var xhr = this.createXhrObject();
8 xhr.onreadystatechange = function(){
9 if(xhr.readyState != 4) return;
10 (xhr.status == 200) ?
11 //Ein globaler Objektrückruf ist definiert, um die Anwendung von Rückgabeparametern durchzuführen
12 callback.success(xhr.responseText,xhr.responseXML):
13 callback.failure(xhr.status);
14};
15 xhr.open(method,url,true);
16 if(method != "POST") postVars = null;
17 xhr.send(postVars);
18},
19 // Die zweite einfache Fabrik erstellt XHR-Objekte entsprechend verschiedenen Situationen. Sie kann unabhängig von der Situation ein korrektes XHR-Objekt zurückgeben.
20 createXhrObject:function(){
21 var-Methoden = [
22 function(){return new XMLHttpRequest();},
23 function(){return new ActiveXObject('Msxml2.XMLHttp');},
24 function(){return new ActiveXObject('Microsoft.XMLHttp');}
25 ];
26 for(var i = 0; i < 3; i++){
27 versuchen{
28 Methoden[i]();
29 }catch(e){
30 weiter;
31}
32 this.createXhrObject = methoden[i]();
33 Rückgabemethoden[i]();
34}
35 throw new Error("Error!");
36}
37 }
38
Vor diesem Hintergrund ist das Fabrikmuster im Allgemeinen eine weitere Erweiterung und Anwendung des Einzelmusters. Das obige Beispiel kann wie folgt aufgerufen werden:
1 window.onload = function(){
2 var myHandler = new SimpleHandler();
3 var Rückruf = {
4 success:function(responseText,responseXML){alert("Success:" + ResponseXML);},
5 failed:function(statusCode){alert("Failure" + statusCode);}
6};
7 myHandler.request('GET','innerHTML.xml',callback);
8
9 };//Natürlich ist der Rückruf je nach Situation unterschiedlich.
Durch die Verwendung des Factory-Musters anstelle der Verwendung des neuen Schlüsselworts und konkreter Klassen können Sie den gesamten Instanzcode an einem Ort zentralisieren.
Mit dem Factory-Muster können Sie zunächst eine abstrakte übergeordnete Klasse und dann Factory-Methoden in der Unterklasse erstellen und so die Instanziierung von Mitgliedsobjekten auf spezialisiertere Unterklassen verschieben, wodurch eine Codeduplizierung wirksam verhindert werden kann.