Conversa fiada sobre padrões de design (9) -Padrão de método de fábrica

Conversa fiada sobre padrões de design (9) -Padrão de método de fábrica

Introdução da coluna

Endereço da coluna

link

Introdução da coluna

Ele analisa e resume principalmente os 23 padrões de design comuns atualmente no mercado, um por um.Espero que os amigos interessados ​​possam dar uma olhada e ele será continuamente atualizado. Espero que vocês possam me supervisionar e possamos aprender e progredir juntos. Vamos, pessoal.
Insira a descrição da imagem aqui

Padrão de método de fábrica

O padrão de método de fábrica é um padrão de design criacional que define uma interface para a criação de objetos, mas cabe à subclasse decidir qual classe instanciar. O padrão de método de fábrica adia a instanciação de objetos para subclasses.

Classificação de funções

Produto abstrato

Ele define a interface do produto e é a classe pai comum ou interface da classe de produto específica.

Produto Concreto

Uma classe concreta que implementa a interface abstrata do produto.

Fábrica Abstrata

Define a interface para criação de produtos, incluindo um ou mais métodos abstratos para criação de produtos.

Fábrica de concreto

Ele implementa a interface abstrata de fábrica e é responsável por instanciar produtos específicos.
Insira a descrição da imagem aqui

idéia principal

Separando a criação e o uso de objetos, o cliente cria objetos chamando métodos de fábrica em vez de instanciar diretamente produtos específicos. A vantagem disso é que o cliente só precisa saber da existência de produtos abstratos e fábricas abstratas, sem se preocupar com os detalhes de produtos específicos. Quando você precisa criar diferentes tipos de produtos, você só precisa implementar os produtos específicos correspondentes e fábricas específicas sem modificar o código do cliente.

Insira a descrição da imagem aqui

Implementação de código Java:

Suponha que haja uma fábrica de automóveis que possa produzir diferentes tipos de carros, incluindo automóveis e SUVs. Primeiro defina uma classe abstrata de carro (AbstractProduct):

public abstract class Car {
    
    
    public abstract void drive();
}

Em seguida, defina a classe de carro específica (ConcreteProduct1) e a classe SUV (ConcreteProduct2), que herdam da classe abstrata de carro:

public class SedanCar extends Car {
    
    
    @Override
    public void drive() {
    
    
        System.out.println("Driving sedan car...");
    }
}

public class SUV extends Car {
    
    
    @Override
    public void drive() {
    
    
        System.out.println("Driving SUV...");
    }
}

A seguir defina a classe abstrata de fábrica de carros (AbstractFactory), que contém um método abstrato para criar carros:

public abstract class CarFactory {
    
    
    public abstract Car createCar();
}

Em seguida, defina a classe específica de fábrica de automóveis (ConcreteFactory1) e a classe de fábrica de SUV (ConcreteFactory2), que herdam da classe abstrata de fábrica de automóveis:

public class SedanCarFactory extends CarFactory {
    
    
    @Override
    public Car createCar() {
    
    
        return new SedanCar();
    }
}

public class SUVFactory extends CarFactory {
    
    
    @Override
    public Car createCar() {
    
    
        return new SUV();
    }
}

Por fim, use o método factory no código do cliente para criar o objeto car:

public class Client {
    
    
    public static void main(String[] args) {
    
    
        CarFactory factory1 = new SedanCarFactory();
        Car sedanCar = factory1.createCar();
        sedanCar.drive();
        
        CarFactory factory2 = new SUVFactory();
        Car suv = factory2.createCar();
        suv.drive();
    }
}

O resultado de saída é

Driving sedan car...
Driving SUV...

analisar

Através do padrão de método de fábrica, o código do cliente só precisa interagir com o produto abstrato e a fábrica abstrata, sem se preocupar com o processo de criação do produto específico. Quando você precisa adicionar outros tipos de carros, você só precisa implementar os produtos específicos correspondentes e fábricas específicas sem modificar o código do cliente, alcançando escalabilidade e manutenção do código.
Insira a descrição da imagem aqui

Análise de Vantagens e Desvantagens

vantagem

Cumprir o princípio de abertura e fechamento

O padrão de método de fábrica torna o sistema mais escalável ao introduzir os conceitos de fábrica abstrata e fábrica concreta. Quando for necessário adicionar um novo produto, basta adicionar o produto específico correspondente e a fábrica específica, sem modificar o código existente, o que é consistente com o princípio de abertura e fechamento.

Encapsula o processo de criação de objetos

O cliente só precisa se preocupar com produtos abstratos e fábricas abstratas, e não precisa se preocupar com o processo de criação de produtos específicos. O processo de criação de produtos específicos é encapsulado em fábricas específicas, tornando o código do cliente mais conciso e legível.

Reduz o acoplamento entre clientes e produtos específicos

O cliente depende apenas de produtos e fábricas abstratas, não de produtos específicos. Isso pode dissociar o código do cliente do produto específico e melhorar a flexibilidade e a capacidade de manutenção do código.

Classes específicas de fábrica podem ser especificadas dinamicamente por meio de arquivos de configuração, etc.

O padrão de método de fábrica pode especificar dinamicamente classes de fábrica específicas por meio de arquivos de configuração, reflexão, etc., obtendo assim um método de criação de objeto mais flexível.
Insira a descrição da imagem aqui

deficiência

Aumenta a complexidade do sistema

A introdução dos conceitos de fábrica abstrata e fábrica concreta torna a estrutura do sistema mais complexa. Se houver apenas alguns produtos no sistema, usar o padrão do método de fábrica pode parecer muito complexo para manter e compreender.

Aumentou a quantidade de código

O padrão de método de fábrica requer a definição de múltiplas classes, como produtos abstratos, produtos concretos, fábricas abstratas e fábricas concretas, o que aumenta a quantidade de código. Para projetos simples, usar o padrão de método de fábrica pode parecer redundante.

O cliente precisa saber a classe específica da fábrica

O cliente precisa saber da existência da classe de fábrica específica, o que aumenta a dependência do cliente. Se a lógica de criação de uma classe de fábrica específica for alterada, o código do cliente também precisará ser modificado de acordo.

Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/weixin_74888502/article/details/133457813
Recomendado
Clasificación