1. Definiciones
Para crear una definición del objeto 接口
, por lo que 子类
decidir a qué instancia de una clase. El método de fabricación de una fábrica de crear una instancia de la clase a retrasar sus subclases.
2, por ejemplo
Hay un Animal
puerto, hay dos clases Dog
y Cat
se heredan de interfaz. Llamamos a una AnimalDactory
interfaz de clase de fábrica, y luego definir DogFactory
y CatFactory
clase para crear, respectivamente, Dog
y Cat
los casos, por el terminal llamante decidir qué plantas para crear 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();
}
}
Este es el resultado de la operación:
我是猫!
我是狗!
4, las ventajas
patrón de la fábrica en 简单工厂模式
y 工厂方法模式
. 简单方法模式
Los métodos de fábrica es generalmente estático, no tendrá una interfaz, y puede crear múltiples instancias de una planta , como sigue:
// 简单工厂模式的工厂
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);
}
}
En 工厂方法模式
la, hay la interfaz de fábrica, y para diferentes casos, tener una pluralidad de clase de fábrica.
Vemos aquí encontrarán, 简单工厂模式
que 工厂方法模式
es, más concisa (porque no hay más clase de fábrica). Sin embargo, en 简单工厂模
la fórmula, la clase de fábrica contiene una lógica de decisión, si queremos añadir una nueva clase de animal, resulta necesario modificar el método de la clase de fábrica original, por lo que no sólo permite ampliar abierta a la modificación también abierta , en contra de la abierta - cerrada principio . Y si se utiliza 工厂方法
el modo, sólo tenemos que añadir una nueva planta será capaz de lograr la expansión funcional, sin ir a modificar el código original.
existe un problema Básicamente, estos dos modelos son juzgados. 简单工厂模式
Es determinar la lógica en un método de fábrica, 工厂方法模式
poner la llamada en extremo la lógica de decisión, por el terminal llamante para determinar el uso que clase de fábrica, por lo que cuando se quiere agregar nuevas características, sólo hay que modificar la llamada termina en la línea, en lugar de la clase de fábrica .
5, escenarios de aplicación
- escudo modo de fábrica detalles internos de la clase se crea para reducir el acoplamiento entre la clase llamando.
- Si el proceso de crear una clase más compleja utilizando el generador de clases puede reducir efectivamente la complejidad del sistema.
- Depender de marco Abstract Factory, tiene buena escalabilidad.