introduire
Semblable au mode de création, lors de la création d'un objet (considéré comme un produit dans l'usine), il n'est pas nécessaire de spécifier la classe spécifique pour créer l'objet.
Le modèle d'usine définit une interface pour créer des objets, et cette interface est déterminée par la sous-classe pour instancier quelle classe. Ce modèle retarde l'instanciation d'une classe à une sous-classe. Les sous-classes peuvent remplacer les méthodes d'interface afin de spécifier leur propre type d'objet lors de leur création.
Ce mode est très utile, en particulier lors de la création d'assistations de processus pour les objets, tels que s'appuyer sur de nombreux fichiers de paramètres. En outre, vous verrez souvent des méthodes d'usine de votre programme pour faire en sorte que la classe de sous-classe définisse le type d'objet qui doit être créé.
texte
Dans l'exemple suivant, une version améliorée du code de modèle du constructeur dans le chapitre 26 en utilisant la méthode d'usine:
La copie de code est la suivante:
var car = (function () {
var car = fonction (modèle, année, miles) {
this.model = modèle;
this.year = an;
this.miles = miles;
};
Fonction de retour (modèle, année, miles) {
Retourner une nouvelle voiture (modèle, année, miles);
};
}) ();
var tom = new Car ("Tom", 2009, 20000);
var dudu = new Car ("Dudu", 2010, 5000);
S'il est difficile à comprendre, donnons un autre exemple:
La copie de code est la suivante:
var productManager = {};
ProductManager.CreateProducta = fonction () {
console.log ('producta');
}
ProductManager.CreateProductB = fonction () {
Console.log ('ProductB');
}
ProductManager.factory = fonction (typetype) {
retourner new ProductManager [TypeType];
}
ProductManager.Factory ("CreateProducta");
Si nous ne le comprenons pas encore, soyons plus détaillés. Si nous voulons insérer certains éléments dans la page Web et que ces éléments ne sont pas fixés dans les types, ils peuvent être des images, des connexions ou même du texte. Selon la définition du modèle d'usine, nous devons définir la classe d'usine et la sous-classe correspondante. Définissons d'abord la mise en œuvre spécifique de la sous-classe (c'est-à-dire la sous-fonction):
La copie de code est la suivante:
var page = page || {};
page.dom = page.dom || {};
// Sous-fonction 1: Traitement du texte
page.dom.text = function () {
this.insert = fonction (où) {
var txt = document.CreateTextNode (this.url);
Where.ApendChild (txt);
};
};
// Sous-fonction 2: lien de traitement
page.dom.link = function () {
this.insert = fonction (où) {
var link = document.CreateElement ('A');
link.href = this.url;
link.appendChild (document.CreateTextNode (this.url));
Where.ApendChild (lien);
};
};
// Sous-fonction 3: Traitement des images
page.dom.image = function () {
this.insert = fonction (où) {
var im = document.CreateElement ('img');
im.src = this.url;
où.ApendChild (im);
};
};
Alors, comment définissons-nous les fonctions de traitement d'usine? C'est en fait très simple:
La copie de code est la suivante:
page.dom.factory = fonction (type) {
retourner une nouvelle page.dom [type];
}
Comment l'utiliser est comme suit:
La copie de code est la suivante:
var o = page.dom.factory ('lien');
o.url = 'http://www.cnblogs.com';
O.insert (document.body);
À ce stade, je crois que tout le monde a déjà compris l'introduction du modèle d'usine, donc je ne le décrirai plus.
Résumer
Quand utiliser le mode d'usine
Le modèle d'usine est particulièrement utile dans les scénarios suivants:
1. La construction d'objets est très complexe
2. Vous devez compter sur l'environnement spécifique pour créer différentes instances
3. Gérer un grand nombre de petits objets avec les mêmes attributs
Quand ne devrait pas utiliser le mode d'usine
N'abusez pas du modèle d'usine, il ajoute parfois une complexité inutile au code et rend difficile l'exécution du test.