introduzir
Semelhante ao modo de criação, ao criar um objeto (considerado um produto na fábrica), não há necessidade de especificar a classe específica para criar o objeto.
O padrão de fábrica define uma interface para criar objetos, e essa interface é determinada pela subclasse para instanciar qual classe. Esse padrão atrasa a instanciação de uma classe para uma subclasse. As subclasses podem substituir os métodos de interface para especificar seu próprio tipo de objeto ao criá -los.
Esse modo é muito útil, especialmente ao criar atribuições de processo para objetos, como confiar em muitos arquivos de configurações. Além disso, você costuma ver métodos de fábrica em seu programa para fazer com que a classe subclasse defina o tipo de objeto que precisa ser criado.
texto
No exemplo a seguir, uma versão aprimorada do código do padrão do construtor no capítulo 26 usando o método da fábrica:
A cópia do código é a seguinte:
var carro = (function () {
var carro = função (modelo, ano, milhas) {
this.model = modelo;
this.year = ano;
this.miles = Miles;
};
Função de retorno (modelo, ano, milhas) {
devolver carro novo (modelo, ano, milhas);
};
}) ();
Var Tom = New Car ("Tom", 2009, 20000);
var dudu = novo carro ("Dudu", 2010, 5000);
Se for difícil de entender, vamos dar outro exemplo:
A cópia do código é a seguinte:
var ProductManager = {};
ProductManager.CreateProducta = function () {
console.log ('ProductA');
}
ProductManager.CreateProductB = function () {
console.log ('ProductB');
}
ProductManager.Factory = function (TypeType) {
retornar novo productManager [TypeType];
}
productManager.Factory ("CreateProducta");
Se ainda não entendermos, então sejamos mais detalhados. Se quisermos inserir alguns elementos na página da web e esses elementos não são fixados nos tipos, eles podem ser imagens, conexões ou até texto. De acordo com a definição do padrão de fábrica, precisamos definir a classe de fábrica e a subclasse correspondente. Vamos primeiro definir a implementação específica da subclasse (ou seja, a subcunção):
A cópia do código é a seguinte:
var página = página || {};
página.dom = página.dom || {};
// Subfunção 1: Texto de processamento
página.dom.text = function () {
this.insert = function (where) {
var txt = document.createTextNode (this.url);
onde.appendChild (txt);
};
};
// Subfunção 2: Link de processamento
página.dom.link = function () {
this.insert = function (where) {
var link = document.createElement ('a');
link.href = this.url;
link.appendChild (document.createTextNode (this.url));
onde.appendChild (link);
};
};
// Subfunção 3: Processando imagens
página.dom.image = function () {
this.insert = function (where) {
var iM = document.createElement ('img');
im.src = this.url;
onde.appendChild (im);
};
};
Então, como definimos funções de processamento de fábrica? É realmente muito simples:
A cópia do código é a seguinte:
página.dom.factory = function (type) {
retornar nova página.dom [tipo];
}
Como usá -lo é o seguinte:
A cópia do código é a seguinte:
var o = página.dom.factory ('link');
O.url = 'http://www.cnblogs.com';
O.Insert (document.body);
Nesse ponto, acredito que todos já tenham entendido a introdução do modelo de fábrica, por isso não o descreverei mais.
Resumir
Quando usar o modo de fábrica
O modelo de fábrica é particularmente útil nos seguintes cenários:
1. A construção de objetos é muito complexa
2. Você precisa confiar no ambiente específico para criar diferentes instâncias
3. Lidar com um grande número de pequenos objetos com os mesmos atributos
Quando não deve usar o modo de fábrica
Não abuse do modelo de fábrica, às vezes apenas adiciona complexidade desnecessária ao código e dificulta a execução do teste.