Avant de lire cet article, il est recommandé de lire cet article : Mode Singleton des modèles de conception JavaScript Après tout, je pense personnellement qu'il est préférable de procéder étape par étape.
Le modèle d'usine est divisé en modèle d'usine simple et en modèle d'usine complexe. Le premier utilise une classe pour générer une instance, généralement un singleton. Le second utilise une sous-classe pour déterminer de quelle classe une variable membre est une instance spécifique. L'usine est contenue dans des usines complexes.
Parlons de cette usine en détail à travers un exemple précis.
Utiliser la technologie Ajax pour lancer des requêtes asynchrones est aujourd’hui une tâche courante dans le développement Web.
1 //implémente AjaxHandler, crée une usine complexe pour exécuter une série de processus Ajax, qui contient deux usines simples
2 var SimpleHandler = function(){};
3
4 SimpleHandler.prototype = {
5 //La première usine simple effectue la création, la requête et l'envoi Ajax. . . attendez
6 requête :fonction (méthode,url,rappel,postVars){
7 var xhr = this.createXhrObject();
8 xhr.onreadystatechange = fonction(){
9 if(xhr.readyState != 4) return;
10 (xhr.status == 200) ?
11 //Un rappel d'objet global est défini pour effectuer l'application des paramètres de retour
12 callback.success(xhr.responseText,xhr.responseXML) :
13 rappel.failure(xhr.status);
14} ;
15 xhr.open(méthode,url,true);
16 if(method != "POST") postVars = null;
17 xhr.send(postVars);
18},
19 //La deuxième usine simple crée des objets XHR en fonction de différentes situations. Elle peut renvoyer un objet XHR correct quelle que soit la situation.
20 createXhrObject:fonction(){
21 méthodes var = [
22 function(){retourner un nouveau XMLHttpRequest();},
23 function(){return new ActiveXObject('Msxml2.XMLHttp');},
24 function(){return new ActiveXObject('Microsoft.XMLHttp');}
25] ;
26 pour(var i = 0; i < 3; i++){
27 essais{
28 méthodes[i]();
29 }attraper(e){
30 continuer ;
31}
32 this.createXhrObject = méthodes[i]();
33 méthodes de retour[i]();
34}
35 throw new Error("Erreur!");
36}
37 }
38
Compte tenu de cela, le modèle d'usine est généralement une extension et une application supplémentaires du modèle unique. L'exemple ci-dessus peut être appelé comme ceci :
1 window.onload = fonction(){
2 var monHandler = new SimpleHandler();
3 rappel var = {
4 succès :fonction(responseText,responseXML){alert("Succès :" + réponseXML);},
5 échec :fonction(statusCode){alert("Failure" + statusCode);}
6} ;
7 myHandler.request('GET','innerHTML.xml',callback);
8
9 };//Bien sûr, le rappel sera différent selon la situation.
En utilisant le modèle d'usine au lieu d'utiliser le nouveau mot-clé et les classes concrètes, vous pouvez centraliser tout le code d'instance en un seul emplacement.
À l'aide du modèle d'usine, vous pouvez d'abord créer une classe parent abstraite, puis créer des méthodes d'usine dans la sous-classe, différant ainsi l'instanciation des objets membres vers des sous-classes plus spécialisées, ce qui peut empêcher efficacement la duplication de code.