introducir
Similar al modo de creación, al crear un objeto (considerado como un producto en la fábrica), no es necesario especificar la clase específica para crear el objeto.
El patrón de fábrica define una interfaz para crear objetos, y la subclase determina esta interfaz para instanciar qué clase. Este patrón retrasa la instanciación de una clase a una subclase. Las subclases pueden anular los métodos de interfaz para especificar su propio tipo de objeto al crearlos.
Este modo es muy útil, especialmente al crear asignaciones de proceso para objetos, como confiar en muchos archivos de configuración. Además, a menudo verá métodos de fábrica en su programa para que la clase de subclase defina el tipo de objeto que debe crearse.
texto
En el siguiente ejemplo, una versión mejorada del código del patrón del constructor en el Capítulo 26 utilizando el método de fábrica:
La copia del código es la siguiente:
var car = (function () {
var car = function (modelo, año, millas) {
this.model = modelo;
this.Year = año;
this.miles = millas;
};
función de retorno (modelo, año, millas) {
regresar nuevo auto (modelo, año, millas);
};
}) ();
var tom = auto nuevo ("Tom", 2009, 20000);
var dudu = auto nuevo ("dudu", 2010, 5000);
Si es difícil de entender, damos otro ejemplo:
La copia del código es la siguiente:
var productManager = {};
ProductManager.CreatePRODUCTA = function () {
console.log ('Producta');
}
productManager.createProductB = function () {
console.log ('ProductB');
}
productManager.factory = function (typetype) {
devolver nuevo ProductManager [TypeType];
}
ProductManager.Factory ("CreateProductA");
Si aún no lo entendemos, entonces seamos más detallados. Si queremos insertar algunos elementos en la página web, y estos elementos no se fijan en los tipos, pueden ser imágenes, conexiones o incluso texto. Según la definición del patrón de fábrica, necesitamos definir la clase de fábrica y la subclase correspondiente. Primero definamos la implementación específica de la subclase (es decir, la subfunción):
La copia del código es la siguiente:
Página var = página || {};
Page.dom = Page.dom || {};
// Subfunción 1: Texto de procesamiento
page.dom.text = function () {
this.insert = function (where) {
var txt = document.createTextNode (this.url);
donde.appendChild (txt);
};
};
// Subfunción 2: enlace de procesamiento
page.dom.link = function () {
this.insert = function (where) {
Var link = document.createElement ('a');
link.href = this.url;
link.appendChild (document.createTextNode (this.url));
donde.appendChild (enlace);
};
};
// Subfunción 3: Procesamiento de imágenes
page.dom.image = function () {
this.insert = function (where) {
var im = document.createElement ('img');
im.src = this.url;
donde.appendChild (im);
};
};
Entonces, ¿cómo definimos las funciones de procesamiento de fábrica? En realidad es muy simple:
La copia del código es la siguiente:
Page.dom.factory = function (type) {
devolver nuevo página.dom [tipo];
}
Cómo usarlo es el siguiente:
La copia del código es la siguiente:
var o = page.dom.factory ('enlace');
o.url = 'http://www.cnblogs.com';
o.insert (document.body);
En este punto, creo que todos ya han entendido la introducción del modelo de fábrica, por lo que ya no lo describiré.
Resumir
Cuándo usar el modo de fábrica
El modelo de fábrica es particularmente útil en los siguientes escenarios:
1. La construcción de objetos es muy compleja
2. Debe confiar en el entorno específico para crear diferentes instancias
3. Maneice una gran cantidad de objetos pequeños con los mismos atributos
¿Cuándo no debería usar el modo de fábrica?
No abuse del modelo de fábrica, a veces solo agrega complejidad innecesaria al código y dificulta la ejecución de la prueba.