Definição: Defina uma interface para criar um objeto, deixe a subclasse decidir qual classe instanciar e o método da fábrica atrasa a instanciação de uma classe à sua subclasse.
Tipo: Criar diagrama de classe de padrões de classe:
Código de padrão de método de fábrica
interface iProduct {public void ProductMethod (); } classe do produto implementa o iProduct {public void ProductMethod () {System.out.println ("Product"); }} interface ifActory {public iProduct createProduct (); } classe de fábrica implementa ifActory {public iProduct createProduct () {return new Product (); }} public classe client {public static void main (string [] args) {ifactory factory = new Factory (); IProduct Product = Factory.CreateProduct (); Produ.ProductMethod (); }} Modo de fábrica:
Primeiro de tudo, precisamos falar sobre o modelo de fábrica. Os modos de fábrica são divididos em três tipos de acordo com o grau de abstração: modo simples de fábrica (também conhecido como modo de fábrica estática), modo de método de fábrica descrito neste artigo e modo de fábrica abstrato. O modo de fábrica é um modelo que é frequentemente usado na programação. Suas principais vantagens são:
Pode deixar a estrutura de código clara e efetivamente encapsular as alterações. Na programação, a instanciação das classes de produtos às vezes é complexa e mutável. Através do modelo de fábrica, a instanciação dos produtos é encapsulada, para que o chamador não precise se preocupar com o processo de instanciação do produto e apenas confiar na fábrica para obter o produto que deseja.
Bloqueie as categorias de produtos específicas do chamador. Se você usa o modo de fábrica, o chamador se preocupa apenas com a interface do produto. Quanto à implementação específica, o chamador não precisa se importar. Mesmo que a implementação específica seja alterada, ela não terá impacto no chamador.
Reduzir o acoplamento. A instanciação das classes de produtos geralmente é muito complicada. Requer confiar em muitas classes, e essas classes não precisam ser conhecidas pelo chamador. Se um método de fábrica for usado, tudo o que precisamos fazer é instanciar a classe de produto e depois entregá -lo ao chamador para uso. Para o chamador, as classes das quais o produto depende são transparentes.
Modo de método de fábrica:
Através do diagrama de classes do padrão de método da fábrica, podemos ver que o padrão de método da fábrica possui quatro elementos:
Interface de fábrica. A interface da fábrica é o núcleo do padrão de método da fábrica e é usada para fornecer produtos diretamente com o chamador. Na programação real, uma classe abstrata às vezes é usada como uma interface para interagir com o chamador, que é essencialmente o mesmo.
Implementação de fábrica. Na programação, a implementação da fábrica determina como instanciar produtos, o que é uma maneira de obter expansão. O número de produtos necessários é tantas implementações específicas de fábrica quanto existem.
Interface do produto. O principal objetivo de uma interface de produto é definir as especificações do produto, e todas as implementações do produto devem atender às especificações definidas pela interface do produto. As interfaces do produto são o que os chamadores mais se preocupam e as vantagens e desvantagens das definições da interface do produto determinam diretamente a estabilidade do código do chamador. Da mesma forma, as interfaces do produto também podem ser substituídas por classes abstratas, mas tome cuidado para não violar o princípio de substituição de Richter.
Implementação do produto. As categorias específicas de interfaces de produto determinam o comportamento específico do produto no cliente.
Vantagens do Modelo de Método da Fábrica:
1. Boa embalagem e reduza o acoplamento entre os módulos;
2. Entre as interfaces de produtos e bloqueando as categorias de produtos.
3. Estrutura de desacoplamento típica. Os módulos de alto nível precisam conhecer apenas a classe abstrata do produto.
4. Cumpra a lei dimitesa, o princípio de confiança na inversão e o princípio da substituição de Richter.
Cenários aplicáveis:
Seja o modelo simples de fábrica, o modelo de método de fábrica ou o modelo abstrato de fábrica, eles têm características semelhantes, portanto, seus cenários aplicáveis também são semelhantes.
Primeiro, como um padrão de classe de criação, o padrão de método de fábrica pode ser usado em qualquer lugar de objetos complexos. Uma coisa a observar é que objetos complexos são adequados para o uso do modo de fábrica, enquanto objetos simples, especialmente objetos que podem ser criados por meio de novos, não precisam usar o modo de fábrica. Se você usar o modelo de fábrica, precisará introduzir uma classe de fábrica, que aumentará a complexidade do sistema.
Em segundo lugar, o modelo de fábrica é um modo de desacoplamento típico, e a lei de Dimitter é particularmente óbvia no modelo de fábrica. Se o chamador precisar adicionar dependências para montar o produto sozinho, ele poderá considerar o uso do modelo de fábrica. Reduzirá bastante o acoplamento entre os objetos.
Novamente, como o modelo de fábrica depende da arquitetura abstrata, ele entrega a tarefa de instantar o produto à classe de implementação a ser concluída, que tem melhor escalabilidade. Em outras palavras, quando o sistema precisa ser mais escalável, o modelo de fábrica pode ser considerado e produtos diferentes podem ser montados com diferentes fábricas de implementação.
Aplicações típicas
Para ilustrar as vantagens do modelo de fábrica, pode não haver um exemplo mais apropriado do que montar um carro. O cenário é assim: o carro consiste em um motor, rodas e um chassi, e agora é necessário montar um carro e entregá -lo ao chamador. Se o modo de fábrica não for usado, o código será o seguinte:
classe mecanismo {public void getStyle () {System.out.println ("Este é o motor do carro"); }} classe Underpan {public void getStyle () {System.out.println ("Este é o chassi do carro"); }} classe roda {public void getStyle () {System.out.println ("Este é o pneu do carro"); }} public class Client {public static void main (String [] args) {Engine Engine = new Engine (); Underpan Underpan = New Underpan (); Roda da roda = nova roda (); Carro ICAR = carro novo (Underpan, roda, motor); car.show (); }}Pode -se observar que, para montar o carro, o chamador também precisa instanciar o motor, o chassi e os pneus, e os componentes desses carros são independentes do chamador, o que viola seriamente a Lei de Dimitt e tem um acoplamento muito alto. E é muito desfavorável para a expansão. Além disso, neste exemplo, o motor, o chassi e os pneus são relativamente específicos. Em aplicações reais, os componentes desses produtos podem ser abstratos e o chamador não tem idéia de como montar o produto. Se o método da fábrica for usado, toda a arquitetura parecerá muito mais clara.
interface ifactory {public icar createcar (); } classe de fábrica implementa ifActory {public ICar createCar () {Engine Engine = new Engine (); Underpan Underpan = New Underpan (); Roda da roda = nova roda (); Carro ICAR = carro novo (Underpan, roda, motor); carro de volta; }} public classe client {public static void main (string [] args) {ifactory factory = new Factory (); ICAR Car = Factory.CreateCar (); car.show (); }}Depois de usar o método da fábrica, o grau de acoplamento no lado da chamada é bastante reduzido. E para fábricas, pode ser expandido. Se você deseja montar outros carros no futuro, só precisará adicionar outra implementação de fábrica. Tanto a flexibilidade quanto a estabilidade foram bastante aprimoradas.
PS: Modo de método de fábrica e modo de fábrica simples
O modelo simples de fábrica mencionado acima é muito semelhante ao modelo de método de fábrica. O núcleo da classe de método de fábrica é uma classe de fábrica abstrata, enquanto o modelo simples de fábrica coloca o núcleo em uma classe de concreto. A diferença no modelo de método de fábrica e no modelo simples de fábrica não é muito óbvio.