Antes de ler este artigo, é recomendável ler este artigo: Modo Singleton de padrões de design JavaScript Afinal, pessoalmente acho que é melhor prosseguir passo a passo.
O padrão de fábrica é dividido em padrão de fábrica simples e padrão de fábrica complexo. O primeiro usa uma classe para gerar uma instância, geralmente um singleton, ou seja, a classe simples. fábrica contém em fábricas complexas.
Vamos falar detalhadamente sobre esta fábrica através de um exemplo específico.
Usar a tecnologia Ajax para iniciar solicitações assíncronas é uma tarefa comum no desenvolvimento web atualmente.
1 //implementa AjaxHandler, cria uma fábrica complexa para executar uma série de processos Ajax, que contém duas fábricas simples
2 var SimpleHandler = function(){};
3
4 SimpleHandler.prototype = {
5 //A primeira fábrica simples executa a criação, solicitação e envio do Ajax. . . espere
6 solicitação:função(método,url,retorno de chamada,postVars){
7 var xhr = this.createXhrObject();
8 xhr.onreadystatechange = function(){
9 if(xhr.readyState != 4) retorno;
10 (xhr.status == 200) ?
11 //Um callback de objeto global é definido para realizar a aplicação dos parâmetros de retorno
12 retorno de chamada.sucesso(xhr.responseText,xhr.responseXML):
13 callback.failure(xhr.status);
14};
15 xhr.open(método,url,true);
16 if(método!= "POST") postVars = null;
17 xhr.send(postVars);
18},
19 //A segunda fábrica simples cria objetos XHR de acordo com diferentes situações. Ela pode retornar um objeto XHR correto, independentemente da situação.
20 createXhrObject:função(){
21 var métodos = [
22 função(){retornar novo XMLHttpRequest();},
23 função(){retorna novo ActiveXObject('Msxml2.XMLHttp');},
24 function(){return new ActiveXObject('Microsoft.XMLHttp');}
25];
26 for(var i = 0; i < 3; i++){
27 tente{
28 métodos[i]();
29 }pegar(e){
30 continuam;
31}
32 this.createXhrObject = métodos[i]();
33 métodos de retorno[i]();
34}
35 lançar novo Erro("Erro!");
36}
37}
38
Vendo isso, o padrão de fábrica é geralmente uma extensão e aplicação adicional do padrão único. O exemplo acima pode ser chamado assim:
1 janela.onload = function(){
2 var meuHandler = new SimpleHandler();
3 var retorno de chamada = {
4 sucesso:função(responseText,responseXML){alert("Sucesso:" + respostaXML);},
5 falha:function(statusCode){alert("Falha" + statusCode);}
6};
7 myHandler.request('GET','innerHTML.xml',retorno de chamada);
8
9 };//Claro, o retorno de chamada será diferente dependendo da situação.
Ao usar o padrão de fábrica em vez de usar a palavra-chave new e classes concretas, você pode centralizar todo o código da instância em um único local.
Usando o padrão de fábrica, você pode primeiro criar uma classe pai abstrata e, em seguida, criar métodos de fábrica na subclasse, adiando assim a instanciação de objetos membros para subclasses mais especializadas, o que pode efetivamente impedir a duplicação de código.