Definição: fornece uma interface para criar um conjunto de objetos relacionados ou interdependentes sem especificar suas classes de concreto.
Tipo: Criar diagrama de classe de padrões de classe:
A diferença entre o padrão abstrato de fábrica e o padrão de método de fábrica
O padrão de fábrica abstrato é uma versão atualizada do padrão de método de fábrica, usado para criar um conjunto de objetos relacionados ou interdependentes. A diferença entre ele e o modelo de método de fábrica é que o modelo de método de fábrica tem como alvo uma estrutura de hierarquia de produtos; Enquanto o modelo abstrato de fábrica tem como alvo várias estruturas de hierarquia de produtos. Na programação, uma estrutura de produto geralmente se manifesta como uma interface ou classe abstrata. Ou seja, todos os produtos fornecidos pelo modelo de método de fábrica são derivados da mesma interface ou classe abstrata, enquanto os produtos fornecidos pelo modelo abstrato de fábrica são derivados de diferentes interface ou classe abstrata.
No modelo abstrato de fábrica, existe um conceito de família de produtos: a chamada família de produtos refere-se a uma família de produtos compostos por produtos funcionalmente relacionados em diferentes hierarquias de produtos. A série de produtos fornecidos pelo modelo de fábrica abstrato forma uma família de produtos; enquanto a série de produtos fornecidos pelo método da fábrica é chamada de estrutura hierárquica. Ainda usamos o exemplo de produção de carros para ilustrar a diferença entre eles.
No diagrama de classe acima, hatchback e sedan são chamados de duas estruturas hierárquicas diferentes; enquanto os veículos de deslocamento 2.0 e 2,4 veículos de deslocamento são chamados de duas famílias de produtos diferentes. Para ser mais específico, o hatchback de deslocamento 2.0 e o hatchback de 2.4-deslocamento pertencem à mesma estrutura de nível, o sedan 2.0-deslocamento e o sedan de 2.4-deslocamento pertencem a outra estrutura de nível; Enquanto o hatchback de deslocamento 2.0 e o sedan de deslocamento 2.0 pertencem à mesma família de produtos, e o hatchback de deslocamento 2.4 e o sedan de 2.4-deslocamento pertencem a outra família de produtos.
Depois de entender os conceitos de estrutura hierárquica e família de produtos, você entenderá a diferença entre o modelo de método da fábrica e o modelo abstrato de fábrica. Se todos os produtos da fábrica pertencem à mesma estrutura hierárquica, eles pertencem ao modelo de método da fábrica; Se os produtos da fábrica vieram de várias estruturas hierárquicas, elas pertencem ao modelo abstrato de fábrica. Neste exemplo, se um modelo de fábrica fornecer um hatchback de deslocamento 2.0 e um hatchback de deslocamento 2.4, ele pertence ao modelo de método de fábrica; Se um modelo de fábrica fornecer dois produtos, Hatchback de 2.4 e um sedan de deslocamento 2.4, esse modelo de fábrica é um modelo abstrato de fábrica, porque os produtos que ele fornece pertencem a duas estruturas hierárquicas diferentes. Obviamente, se uma fábrica fornecer produtos de todos os quatro modelos, porque os produtos pertencem a duas estruturas hierárquicas, é claro que também pertence ao modelo abstrato de fábrica.
Exemplo
Vejamos o exemplo da classe abstrata da classe de fábrica:
pacote abstractFactory; Classe de abstrato public abstractCrateCreator {// Crie um método de produto Public AbstractRodUcta CreateProducta (); // Crie B Método do Produto Public AbstractProductB CreateProductB ();}Classe abstrata de produto A
pacote abstractFactory; Classe de abstrato public abstractRoducta {// Método compartilhado pelo produto Um público vazio sharemethod () {System.out.println ("Método de processamento de lógica de negócios compartilhado pelo produto A ..."); } // Método diferentes sub-produtores do produto Um abstrato público void dosomething (); }Classe abstrata do produto B
pacote abstractFactory; public abstrate classe abstrateProductb {// Método compartilhado pelo produto B public void sharemethod () {System.out.println ("Método de processamento da lógica de negócios compartilhado pelo produto B ..."); } // Diferentes sub-produtos do produto B public abstrato void dosomething (); } Classe de implementação de fábrica Pacote AbstractFactory; classe pública Creator1 estende abstrateCreator {@Override public abstrataProducta createproducta () {return new ProductorA1 (); } @Override public abstractProductB createproductB () {return new ProductB1 (); }} Classe de implementação de fábrica Pacote AbstractFactory; classe pública Creative2 estende abstractCreator {@Override public abstractProducta CreateProducta () {return new ProductO2 (); } @Override public abstractProductB createproductB () {return new ProductB2 (); }}Produto A1
pacote abstractFactory; public class ProductA1 estende abstrataProducta {@Override public void Dosomething () {System.out.println ("Método de processamento de lógica de negócios do produto A1 ..."); }}Produto A2
pacote abstractFactory; classe pública ProductA2 estende abstrataProducta {@Override public void Dosomething () {System.out.println ("Método de processamento lógico de negócios do produto A2 ..."); }}Produto B1
pacote abstractFactory; classe pública ProductB1 estende abstractProductB {@Override public void Dosomething () {System.out.println ("Método de processamento de lógica de negócios da B1 ..."); }}Produto B2
pacote abstractFactory; classe pública ProductB2 estende abstractProductB {@Override public void Dosomething () {System.out.println ("Método de processamento de lógica de negócios da B2 ..."); }} Vantagens do padrão de fábrica abstrato
Além de ter as vantagens do modelo de método da fábrica, a vantagem mais importante é que a família de produtos pode ser restringida na classe. A chamada família de produtos geralmente tem uma certa relação em maior ou menor grau. O modelo abstrato de fábrica pode definir e descrever a relação entre a família de produtos dentro da classe sem precisar introduzir uma nova classe especificamente para o gerenciamento.
Desvantagens do padrão de fábrica abstrato
Expandir a família de produtos será uma tarefa muito trabalhosa. Se um novo produto precisar ser adicionado à família do produto, quase todas as classes de fábrica precisam ser modificadas. Portanto, ao usar o modelo abstrato de fábrica, a divisão da estrutura da hierarquia de produtos é muito importante.
Cenários aplicáveis
Os padrões de fábrica abstratos podem ser usados quando os objetos a serem criados são uma série de famílias de produtos inter -dependentes ou interdependentes. Para colocar mais claramente, em um sistema de herança, se houver várias estruturas hierárquicas (ou seja, existem várias classes abstratas) e existem certas correlações ou restrições entre as classes de implementação divididas em cada estrutura hierárquica, o modelo de fábrica abstrato pode ser usado. É mais apropriado usar várias fábricas independentes para criar produtos se não houver associações ou restrições entre classes de implementação em cada hierarquia.
Resumir
Seja o modelo simples de fábrica, o modelo de método de fábrica ou o modelo abstrato de fábrica, todos pertencem ao modelo de fábrica e são muito semelhantes em forma e características. O objetivo final deles é dissociar. Ao usá -lo, não precisamos nos importar se esse padrão é o método de fábrica ou um modelo abstrato de fábrica, porque a evolução entre eles geralmente é difícil de entender. Muitas vezes, você descobrirá que, quando ocorrer um novo requisito, uma pequena modificação é feita e um novo método é adicionado, os produtos da classe formam a família de produtos em diferentes estruturas hierárquicas, ele se torna o modelo de fábrica abstrato; E para o modelo abstrato de fábrica, quando um método é reduzido para tornar os produtos fornecidos não mais a família de produtos, ele evolui para o modelo de método da fábrica.
Portanto, ao usar o modo de fábrica, você só precisa se importar se o objetivo de reduzir o acoplamento foi alcançado.