Um padrão de design por dia - método de fábrica

Um: Motivação Padrão

Define uma interface para criar objetos, mas cabe às subclasses decidir qual classe instanciar. Os métodos de fábrica adiam a instanciação para subclasses.

Dois: definição de modo

O padrão de método de fábrica também é chamado de padrão de fábrica, também chamado de padrão construtor virtual (Construtor Virtual) ou padrão de fábrica polimórfica (Fábrica Polimórfica), que pertence ao padrão de criação de classe.
No padrão de método de fábrica, a classe pai de fábrica é responsável por definir a interface pública para criar objetos de produto, enquanto a subclasse de fábrica é responsável por gerar objetos de produto específicos. O objetivo disso é atrasar a instanciação da classe de produto para a fábrica Ou seja, através da subclasse de fábrica para determinar qual classe de produto específica deve ser instanciada.

Em uma fábrica simples, o objeto é criado pela classe pai, enquanto em um método fábrica, o objeto é criado pela subclasse.

Três: estrutura padrão

O padrão Factory Method inclui as seguintes funções:

  • Produto abstrato: produto abstrato
  • concretoProduto: produto concreto
  • AbstractFactory: fábrica abstrata
  • ConcreteFactory: fábrica de concreto
    insira a descrição da imagem aqui

Quatro: exemplo de código

Existem quatro papéis, fábrica abstrata, fábrica concreta, produto abstrato, produto concreto. Não é mais uma classe de fábrica para instanciar um produto concreto, mas uma subclasse de uma fábrica abstrata para instanciar o produto
1. Produto abstrato

public interface Bus {
    
    

    void run();

    void stop();
}

2. O produto concreto ConcreteProduct
implementa a interface

public class BusImpl1 implements Bus {
    
    
    @Override
    public void run() {
    
    
        System.out.println("BusImpl1 is running");
    }

    @Override
    public void stop() {
    
    
        System.out.println("BusImpl1 stop running");
    }
}

public class BusImpl2 implements Bus {
    
    
    @Override
    public void run() {
    
    
        System.out.println("BusImpl2 is running");
    }

    @Override
    public void stop() {
    
    
        System.out.println("BusImpl2 stop running");
    }
}

3. A fábrica abstrata Factory
define a interface de geração do produto

/**
 * 抽象工厂
 */
public abstract class AbstractFactory {
    
    
    abstract public Bus create();
}

4. A fábrica de concreto ConcreteFactory
implementa a interface de geração de produto e gera objetos de função de produto específicos

/**
 * 具体工厂
 */
public class BusImpl1Factory extends AbstractFactory {
    
    
    @Override
    public Bus create() {
    
    
        return new BusImpl1();
    }
}

/**
 * 具体工厂
 */
public class BusImpl2Factory extends AbstractFactory {
    
    
    @Override
    public Bus create() {
    
    
        return new BusImpl2();
    }
}

5. Cliente:

public class Client1 {
    
    
    public static void main(String[] args) {
    
    
        // 由抽象工厂的子类去实例化产品
        AbstractFactory busImpl1Factory = new BusImpl1Factory();
        Bus busImpl1 = busImpl1Factory.create();
        busImpl1.run();

        AbstractFactory busImpl2Factory = new BusImpl2Factory();
        Bus busImpl2 = busImpl2Factory.create();
        busImpl2.stop();
    }
}

Cinco: Análise e conclusão

  • O padrão de método de fábrica, também conhecido como padrão de fábrica, pertence ao padrão de criação de classe. No padrão de método de fábrica, a classe pai de fábrica é responsável por definir a interface pública para criar objetos de produto, enquanto a subclasse de fábrica é responsável por gerar objetos de produto específicos. O objetivo disso é atrasar a instanciação da classe de produto para a fábrica Ou seja, através da subclasse de fábrica para determinar qual classe de produto específica deve ser instanciada.

  • Uma fábrica específica é responsável pela produção de produtos específicos, e cada fábrica específica corresponde a um produto específico

  • O padrão de método de fábrica é mais uma abstração e generalização do padrão de fábrica simples. Devido ao uso do polimorfismo orientado a objetos, o padrão de método de fábrica mantém as vantagens do padrão de fábrica simples e supera suas desvantagens.

  • No padrão de método de fábrica, a classe de fábrica principal não é mais responsável pela criação de todos os produtos, mas delega o trabalho de criação específico às subclasses. Essa classe central é responsável apenas por fornecer a interface que a fábrica concreta deve implementar, não os detalhes da classe do produto que está sendo instanciada, o que faz com que o padrão do método fábrica permita que o sistema introduza novos produtos sem modificar o papel da fábrica.

  • A principal vantagem do padrão de método de fábrica é que não há necessidade de modificar o sistema existente ao adicionar uma nova classe de produto, e encapsula os detalhes de criação do objeto de produto, e o sistema tem boa flexibilidade e extensibilidade;

  • A desvantagem é que quando novos produtos são adicionados, novas fábricas precisam ser adicionadas, resultando em um aumento emparelhado no número de classes do sistema, o que aumenta a complexidade do sistema até certo ponto.

  • O padrão de método de fábrica é aplicável nas seguintes situações:

  • Uma classe para a qual uma classe não conhece os objetos de que precisa;

  • Uma classe especifica qual objeto criar por meio de suas subclasses;

  • A tarefa de criar um objeto é delegada a uma das várias subclasses de fábrica, e o cliente pode usá-la sem se importar com qual subclasse de fábrica cria a subclasse de produto e pode especificá-la dinamicamente quando necessário.

Acho que você gosta

Origin blog.csdn.net/qq_44867340/article/details/117635545
Recomendado
Clasificación