23 patrones de diseño (1) - Factory Method

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 Animalpuerto, hay dos clases Dogy Catse heredan de interfaz. Llamamos a una AnimalDactoryinterfaz de clase de fábrica, y luego definir DogFactoryy CatFactoryclase para crear, respectivamente, Dogy Catlos casos, por el terminal llamante decidir qué plantas para crear 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();
    }
}

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.

Supongo que te gusta

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