23 padrões de design (1) - padrão Factory Method

1. Definições

Para criar uma definição do objeto 接口, de modo 子类a decidir qual instância de uma classe. O método de fazer uma fábrica para instanciar a classe para atrasar suas subclasses.

2, por exemplo

Há um Animalporto, há duas classes Doge Catsão herdadas interface. Chamamos uma AnimalDactoryinterface de classe de fábrica e, em seguida, definir DogFactorye CatFactoryclasse para criar, respectivamente, Doge Catcasos, pelo terminal chamando para decidir quais as plantas para criar objetos.

8fHV6x.png

3, Código

// 创建 动物 接口
public interface Animal {
    void sayName();
}

// 创建 猫和狗 类
public class Cat implements Animal {
    @Override
    public void sayName() {
        System.out.println("我是猫!");
    }
}
public class Dog implements Animal {
    @Override
    public void sayName() {
        System.out.println("我是狗!");
    }
}

// 创建工厂接口类
public interface IAnimalFactory {
    Animal createAnimal();
}
// 分别创建生成猫和狗 的工厂类
public class CatFactory implements IAnimalFactory{
    @Override
    public Animal createAnimal() {
        return new Cat();
    }
}
public class DogFactory implements IAnimalFactory{
    @Override
    public Animal createAnimal() {
        return new Dog();
    }
}


// 客户端使用工厂类来创建动物对象
public class Main {
    public static void main(String[] args) {
        // 分别获得生产猫和狗的工厂类
        IAnimalFactory catFacroty = new CatFactory();
        IAnimalFactory dogFacroty = new DogFactory();

        Animal cat = catFacroty.createAnimal();
        Animal dog = dogFacroty.createAnimal();

        cat.sayName();
        dog.sayName();
    }
}

Aqui está o resultado da operação:

我是猫!
我是狗!

4, as vantagens

padrão de fábrica em 简单工厂模式e 工厂方法模式. 简单方法模式Os métodos de fábrica é geralmente estática, ele não terá uma interface, e pode criar várias instâncias de uma planta , como segue:

// 简单工厂模式的工厂
public class AnimalFactory implements IAnimalFactory{
    @Override
    public Animal createAnimal(String name) {
        // 通过 if 判断,生成多中不同的实例
        if("cat".equals(name)){
            return new Cat();
        }
        if("dog".equals(name)){
            return new Dog();
        }
        throw new RuntimeException("无此类动物:" + name);
    }
}

Em 工厂方法模式a, não é a interface de fábrica, e para casos diferentes, têm uma pluralidade de classe fábrica.

Vemos aqui vai encontrar, 简单工厂模式do que 工厂方法模式ela é, mais concisa (porque não há mais classe de fábrica). No entanto, na 简单工厂模fórmula, a classe de fábrica contém uma lógica de decisão, se queremos adicionar uma nova classe Animal, é necessário modificar o método da classe original de fábrica, de modo que nós não só para expandir aberto para modificação também aberto , ao contrário do aberto - fechado princípio . E se você usar 工厂方法o modo, só precisa adicionar uma nova planta será capaz de alcançar a expansão funcional, sem ir para modificar o código original.

problema Basicamente, estes dois modelos são julgados existe. 简单工厂模式É determinar a lógica em um método de fábrica, 工厂方法模式colocar a chamada em final lógica de decisão, pelo terminal chamando para determinar o uso a que classe de fábrica, então quando você quer adicionar novas funcionalidades, só precisa modificar a chamada termina na linha, em vez da classe de fábrica .

5, cenários de aplicação

  • modo de fábrica escudo detalhes internos da classe é criada para reduzir o acoplamento entre a classe chamando.
  • Se o processo para criar uma classe mais complexa usando a fábrica de classes pode efetivamente reduzir a complexidade do sistema.
  • Contar com quadro resumo padrão de fábrica, ele tem boa escalabilidade.

Acho que você gosta

Origin www.cnblogs.com/moongeek/p/12543690.html
Recomendado
Clasificación