Antes de leer este artículo, se recomienda leer este artículo: Modo Singleton de patrones de diseño de JavaScript. Después de todo, personalmente creo que es mejor proceder paso a paso.
El patrón de fábrica se divide en patrón de fábrica simple y patrón de fábrica complejo. El primero usa una clase para generar una instancia, generalmente un singleton. El segundo usa una subclase para determinar de qué clase es una instancia específica una variable miembro. La fábrica contiene fábricas complejas.
Hablemos de esta fábrica en detalle a través de un ejemplo específico.
El uso de la tecnología Ajax para iniciar solicitudes asincrónicas es una tarea común en el desarrollo web actual.
1 //implementa AjaxHandler, crea una fábrica compleja para ejecutar una serie de procesos Ajax, que contiene dos fábricas simples
2 var SimpleHandler = función(){};
3
4 SimpleHandler.prototipo = {
5 // La primera fábrica simple realiza la creación, solicitud y envío de Ajax. . . esperar
6 solicitud: función (método, URL, devolución de llamada, postVars) {
7 var xhr = this.createXhrObject();
8 xhr.onreadystatechange = función(){
9 si (xhr.readyState! = 4) retorno;
10 (xhr.status == 200)?
11 //Se define una devolución de llamada de objeto global para realizar la aplicación de parámetros de retorno
12 devolución de llamada.éxito (xhr.responseText,xhr.responseXML):
13 devolución de llamada.fallo(xhr.status);
14};
15 xhr.open(método,url,verdadero);
16 if(método!= "POST") postVars = null;
17 xhr.send(postVars);
18},
19 // La segunda fábrica simple crea objetos XHR según diferentes situaciones. Puede devolver un objeto XHR correcto sin importar cuál sea la situación.
20 crearXhrObject:función(){
21 métodos var = [
22 función(){devolver nuevo XMLHttpRequest();},
23 función(){devolver nuevo ActiveXObject('Msxml2.XMLHttp');},
24 función(){return new ActiveXObject('Microsoft.XMLHttp');}
25 ];
26 para(var i = 0; i < 3; i++){
27 intentar {
28 métodos[i]();
29 }captura(e){
30 continúan;
31}
32 this.createXhrObject = métodos[i]();
33 métodos de retorno[i]();
34}
35 arrojar nuevo Error("¡Error!");
36}
37 }
38
Visto esto, el patrón de fábrica es generalmente una extensión y aplicación adicional del patrón único. El ejemplo anterior se puede llamar así:
1 ventana.onload = función(){
2 var myHandler = nuevo SimpleHandler();
Devolución de llamada de 3 var = {
4 éxito: función (texto de respuesta, XML de respuesta) {alerta ("Éxito:" + XML de respuesta);},
5 falla: función (código de estado) {alerta ("falla" + código de estado);}
6};
7 myHandler.request('GET','innerHTML.xml', devolución de llamada);
8
9 };//Por supuesto, la devolución de llamada será diferente según la situación.
Al utilizar el patrón de fábrica en lugar de utilizar la nueva palabra clave y clases concretas, puede centralizar todo el código de instancia en una ubicación.
Usando el patrón de fábrica, primero puede crear una clase principal abstracta y luego crear métodos de fábrica en la subclase, posponiendo así la creación de instancias de objetos miembro a subclases más especializadas, lo que puede prevenir efectivamente la duplicación de código.