Ocasiões aplicáveis:
7.3 Ocasões aplicáveis para o modelo de fábrica
A maneira mais fácil de criar um novo objeto é usar a nova palavra -chave e as classes concretas. Somente em algumas ocasiões a complexidade extra de criar e manter uma fábrica de objetos valer o dinheiro. Esta seção resume essas ocasiões.
7.3.1 Implementação dinâmica
Se você precisar criar objetos que implementem a mesma interface de maneiras diferentes, como o exemplo anterior de bicicleta, você pode usar um método de fábrica ou um objeto simples de fábrica para simplificar o processo de seleção de implementação. Essa escolha pode ser feita explícita ou implicitamente. O primeiro é como o exemplo de bicicleta, e o cliente pode escolher o modelo de bicicleta que você precisa; Enquanto o exemplo de fábrica XHR mencionado na próxima seção pertence a este último. O tipo de objeto de conexão retornado neste exemplo depende da largura de banda detectada e dos fatores de atraso de rede. Nessas situações, você geralmente precisa lidar com uma série de classes que implementam a mesma interface e podem ser tratadas igualmente. Este é o motivo mais comum para usar o padrão de fábrica em JavaScript.
7.3.2 Salvar as configurações no alto
Se os objetos precisarem ser complexos e relevantes um para o outro, o uso do modo de fábrica pode reduzir a quantidade de código necessária para cada objeto. Esse efeito é particularmente proeminente se essa configuração precisar ser executada apenas uma vez para todas as instâncias de um tipo específico. Colocar esse código de configuração no construtor de classe não é uma abordagem eficiente, porque mesmo que o trabalho de configuração seja concluído, o código ainda será executado toda vez que uma nova instância for criada, e isso distribuirá o código de configuração em diferentes classes. O método da fábrica é perfeito para esta ocasião. Pode ser definido imediatamente antes de instantar todos os objetos necessários. Não importa quantas classes diferentes sejam instanciadas, esse método pode manter o código de configuração em um só lugar.
Isso é especialmente útil se a classe usada exigir que a biblioteca externa seja carregada. Os métodos de fábrica podem verificar essas bibliotecas e carregar dinamicamente os não encontrados. Esses códigos de configurações existem em apenas um lugar, por isso é muito mais conveniente modificá -los posteriormente.
7.3.3 Faça um objeto grande com muitos objetos pequenos
O método da fábrica pode ser usado para criar objetos que encapsulam muitos objetos menores. Considere o construtor do objeto de bicicleta. As bicicletas contêm muitos subsistemas menores: rodas, molduras, componentes de transmissão e freios. Se você não deseja um forte acoplamento entre um subsistema e um objeto maior, mas deseja escolher de muitos subsistemas em tempo de execução, a abordagem da fábrica é a escolha ideal. Usando essa tecnologia, você pode um dia corresponder a todas as bicicletas que vende com algum tipo de cadeia e, se encontrar outra cadeia mais favorita no dia seguinte, poderá usar essa nova variedade. É fácil implementar essa mudança porque os construtores dessas classes de bicicleta não dependem de uma variedade de cadeia específica. O exemplo do leitor do RSS posteriormente neste capítulo demonstra o uso do modelo de fábrica nesse sentido.
O padrão de fábrica fornece principalmente uma interface para criar objetos. O modelo de fábrica é dividido em três categorias de acordo com os termos em "Java e Pattern":
1. Fábrica simples
2. Método da fábrica
3. Fábrica abstrata
Esses três padrões são gradualmente abstratos de cima para baixo e são mais gerais. Há também um método de classificação, que deve considerar o modelo simples de fábrica como um caso especial do modelo de método de fábrica, e os dois são classificados na mesma categoria. Aqui estão duas situações em que o modo de fábrica é usado:
1. Ao codificar, você não pode prever que tipo de instâncias você precisa criar.
2. O sistema não deve depender de detalhes sobre como as instâncias da classe do produto são criadas, combinadas e expressas
3. Modelo de fábrica simples
Como o nome sugere, esse modelo em si é simples e é usado em situações em que o negócio é mais simples.
Consiste em três funções (veja o diagrama de classe abaixo para o relacionamento):
1. Função da fábrica: esse é o núcleo desse modelo, que contém certa lógica de negócios e lógica de julgamento. Em Java, é frequentemente implementado por uma classe concreta.
2. Função do produto abstrato: Geralmente é uma classe pai herdada por um produto específico ou uma interface implementada. Implementado por interfaces ou classes abstratas em Java.
3. Função específica do produto: O objeto criado pela classe de fábrica é uma instância dessa função. Implementado por uma classe concreta em Java.
Então, como usar o modelo simples de fábrica? Deixe -me dar um exemplo. Eu acho que é muito mais fácil de entender do que uma descrição teórica de texto longa! Aqui está o tratamento para o Nouveau Riche: P
Depois de usar o modelo simples de fábrica, o Nouveau Riche agora só precisa sentar no carro e dizer ao motorista: "dirigir". Vamos ver como é implementado:
// RONA DE PRODUTO DE PRODUTO ABRAÇO Public Interface Car {public void drive (); } // Função específica da classe pública Benz implementa o carro {public void drive () {System.out.println ("Driving Benz"); }} classe pública BMW implementa o carro {public void drive () {System.out.println ("acionando BMW"); }}. . . (Não vou escrever Audi: P) // Classe da classe Factory Public Class Driver {// Método da Factory // Observe que o tipo de retorno é um papel abstrato do produto estático estático de motorista de carro (strings) joga exceção {// juiz a lógica, retorne a função específica do produto ao cliente se (S.EqualSignorecase ("Benz") Return New Benz (); caso contrário, se (s.equalsignorecase ("bmw")) retorna new bmw (); ...... else lançar uma nova exceção (); . . . // Aprecie o nouveau riche para aparecer ... public class Magnate {public static void main (string [] args) {tente {// diga ao motorista que estou pegando um carro Mercedes-benz = driver.drivercar ("benz"); // Dê o comando: drive (); . .Se você colocar todas as classes em um arquivo, não esqueça que apenas uma classe é declarada pública. A relação entre as aulas em um programa é a seguinte:
Este é o modelo simples de fábrica. Aqui estão os benefícios:
Primeiro de tudo, depois de usar o modelo simples de fábrica, nosso programa não é "doente" e está mais alinhado com a realidade; e o cliente está isento da responsabilidade de criar diretamente os objetos do produto, mas é responsável apenas por "consumir" produtos (como o Nouveau Riche faz).
Vamos analisar o modelo simples de fábrica a partir do princípio de abertura e fechamento. Quando o Nouveau Riche adiciona um carro, desde que atenda ao contrato formulado pelo produto abstrato, ele pode ser usado pelo cliente, desde que seja notificado para a fábrica. Portanto, para a parte do produto, ele está em conformidade com o princípio de abertura e fechamento - abertura para expansão e fechamento para modificação; Mas a parte da fábrica parece não ser o ideal, porque toda vez que um carro é adicionado, a lógica de negócios correspondente e a lógica de julgamento deve ser adicionada à classe de fábrica, que naturalmente viola o princípio de abrir e fechar.
Para essa aula de fábrica (no nosso caso para o motorista), chamamos de classe Todo -Poderosa ou a classe deus.
O exemplo que damos é o caso mais simples e, em aplicações práticas, é provável que o produto seja uma estrutura de árvore de vários níveis. Como existe apenas uma aula de fábrica no modelo simples de fábrica para corresponder a esses produtos, isso pode arruinar nossa classe de Deus e, por sua vez, esgotar nossos adoráveis programadores :(
Como mencionei anteriormente, o modelo simples de fábrica é adequado para situações em que o negócio será simples. Mas pode não ser muito adaptável a ambientes de negócios complexos. Isso deve ser feito pelo modelo de método da fábrica! !
4. Modelo de método de fábrica
Vamos dar uma olhada em sua composição primeiro:
1. Função da fábrica abstrata: esse é o núcleo do padrão de método da fábrica, não tem nada a ver com o aplicativo. É uma interface que uma função de fábrica específica deve implementar ou uma classe pai que deve ser herdada. Em Java, é implementado por classes ou interfaces abstratas.
2. Função de fábrica específica: contém código relacionado à lógica de negócios específica. Chamado pelo aplicativo para criar o objeto de produto específico correspondente. Em Java, é implementado por classes de concreto.
3. Função do produto abstrato: é a classe pai herdada por um produto específico ou uma interface implementada. Em Java, geralmente existem classes ou interfaces abstratas para implementá -las.
4. Função específica do produto: O objeto criado por uma função de fábrica específica é um exemplo dessa função. Implementado por classes de concreto em Java.
Use diagramas de classe para representar claramente o relacionamento entre eles:
Vamos usar um exemplo completo para ver como os vários papéis do modelo de fábrica são coordenados. Falando nos negócios de Nouveau Riche, mais e mais carros eles amam. Isso fez o motorista sofrer. Ele tinha que se lembrar e manter qualquer carro, e ele tinha que usá -lo! Então, o Nouveau Riche simpatizou com ele e disse: Depende de seus anos para mim, você não precisará trabalhar tanto no futuro. Vou atribuir a você alguns funcionários, basta cuidar deles! Portanto, surgiu o gerenciamento do modelo de método da fábrica. O código é o seguinte:
// RONOS DE PRODUTOS ABRAÇOS, as funções específicas do produto são semelhantes ao modelo simples de fábrica, mas elas se tornaram um pouco mais complicadas, aqui está um pouco omitido. // ROPE DE FACTORY ROUBRO ABRACO Driver de interface pública {public Car DriverCar (); } classe pública Benzdriver implementa o driver {public car DriverCar () {return New Benz (); }} classe pública bmwdriver implementa o driver {public car driverCar () {return bmw (); }} ...... // Deve formar uma relação correspondente com o produto específico, aqui ... // Peça ao Sr. Nouveaux public class Magnate {public static void main (string [] args) {try {driver = new Benzdriver (); Carro carro = driver.drivercar (); car.Drive (); } catch (Exceção e) {}}}O método da fábrica usa uma função de fábrica abstrata como núcleo, em vez de usar classes de concreto como núcleo em um padrão simples de fábrica. Vamos dar uma olhada no que o modelo de método de fábrica nos trouxe? Use o princípio de abertura e fechamento para analisar o modelo de método de fábrica. Quando um novo produto (ou seja, o carro do Nouveau Riche) é gerado, desde que seja gerado de acordo com o contrato fornecido pelo papel abstrato do produto e pelo papel abstrato da fábrica, ele pode ser usado pelo cliente sem precisar modificar nenhum código existente. Parece que o modelo de método de fábrica está totalmente alinhado com o princípio de abrir e fechar!
O uso do modelo de abordagem de fábrica é suficiente para lidar com a maioria das necessidades de negócios que podemos encontrar. No entanto, quando existem muitos tipos de produtos, será exibido um grande número de categorias de fábrica correspondentes, o que não deve ser o que esperamos. Por isso, sugiro usar um padrão simples de fábrica, neste caso, combinado com o padrão de método da fábrica para reduzir a classe de fábrica: ou seja, usando um padrão simples de fábrica para espécies semelhantes na árvore de produtos (geralmente aqueles que são irmãos nas folhas da árvore).
Obviamente, circunstâncias especiais precisam ser tratadas com tratamento especial: para diferentes árvores de produtos no sistema e existem famílias de produtos nas árvores de produtos; então, neste caso, o modelo abstrato de fábrica pode ser usado.
5. Resumo
Vamos dar uma olhada na inspiração dada pelo modelo simples de fábrica e modelo de método de fábrica:
Se não usarmos o padrão de fábrica para implementar nosso exemplo, talvez o código seja muito menor - basta implementar o carro existente, sem usar o polimorfismo. Mas em termos de manutenção, a escalabilidade é muito ruim (você pode imaginar a aula que deseja tocar depois de adicionar um carro). Portanto, para melhorar a escalabilidade e a manutenção, vale a pena escrever mais código.
6. Padrão de fábrica abstrato
Vamos primeiro entender o que é uma família de produtos: uma família de produtos compostos de funções localizadas em diferentes hierarquias e estruturas de produtos. Se você pode entender claramente esse conceito apenas lendo esta frase, tenho que admirá -lo. Vamos usar um exemplo para ilustrá -lo vividamente.
BMWCAR e Benzcar na figura são duas árvores de produto (hierarquia de produtos); enquanto BenzsportScar e BMWSportScar, como mostrado na figura, são uma família de produtos. Todos eles podem ser colocados na família de carros esportivos, então as funções estão relacionadas. Da mesma forma, Bmwbussinesscar e BenzsportScar também são a mesma família de produtos.
Voltando ao tópico do modelo de produto abstrato, pode -se dizer que a diferença entre ele e o modelo de método de fábrica está na complexidade da necessidade de criar objetos. Além disso, o modelo abstrato de fábrica é o mais abstrato e geral entre os três. O objetivo do padrão abstrato de fábrica é fornecer uma interface ao cliente para criar objetos de produto em várias famílias de produtos. Além disso, as seguintes condições devem ser atendidas ao usar o padrão abstrato de fábrica:
1. Existem várias famílias de produtos no sistema e o sistema só pode consumir um dos produtos por vez.
2. Use produtos pertencentes à mesma família de produtos.
Vamos dar uma olhada nos vários papéis do padrão abstrato de fábrica (exatamente o mesmo que o método da fábrica):
Função da fábrica abstrata: esse é o núcleo do padrão de método da fábrica, não tem nada a ver com o aplicativo. É uma interface que uma função de fábrica específica deve implementar ou uma classe pai que deve ser herdada. Em Java, é implementado por classes ou interfaces abstratas.
Função de fábrica específica: contém código relacionado à lógica de negócios específica. Chamado pelo aplicativo para criar o objeto de produto específico correspondente. Em Java, é implementado por classes de concreto.
Abstract Product Papel: é a classe pai ou interface de implementação da herança específica do produto. Em Java, geralmente existem classes ou interfaces abstratas para implementá -las.
Função específica do produto: o objeto criado por uma função de fábrica específica é uma instância dessa função. Implementado por classes de concreto em Java.
Depois de ler os dois primeiros modos, eu deveria ter uma idéia clara da coordenação entre os vários caracteres nesse modo, para não dar exemplos específicos. Só que você deve prestar atenção em atender às condições para usar o modelo abstrato de fábrica, caso contrário, mesmo que existam várias árvores de produtos, ainda existem famílias de produtos, mas elas não podem ser usadas.
O artigo acima tem uma compreensão profunda dos três modelos de fábrica de Java. Este é todo o conteúdo que compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.