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 Animal
porto, há duas classes Dog
e Cat
são herdadas interface. Chamamos uma AnimalDactory
interface de classe de fábrica e, em seguida, definir DogFactory
e CatFactory
classe para criar, respectivamente, Dog
e Cat
casos, pelo terminal chamando para decidir quais as plantas para criar objetos.
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.