Patrón de fábrica: fábrica simple, método de fábrica, análisis de fábrica abstracto

Hoy aprenderé un patrón de diseño que se usa mucho y es muy poderoso, el patrón de fábrica. El núcleo principal es ayudarnos a programar de manera abstracta, en lugar de tipos específicos de programación.

Partiendo del problema

  1. ¿Qué es una simple fábrica? ¿Es un patrón de diseño? ¿Si lo usas?
  2. ¿Cuál es el método de fábrica? ¿Qué es abstracto?
  3. ¿Qué es una fábrica abstracta? ¿Qué es abstracto?
  4. ¿La diferencia entre el método de fábrica y la fábrica abstracta?

Patrón de fábrica simple

La fábrica simple no se considera un patrón de diseño real, sino más bien un hábito de programación nuestro, pero es una forma sencilla de desacoplar programas cliente de clases específicas en la codificación habitual.

Introducción

La clase de fábrica tiene un método de fábrica (crear) que acepta un parámetro y crea instancias de diferentes clases de productos a través de diferentes parámetros.

Icono:

[Error en la transferencia de la imagen del enlace externo. El sitio de origen puede tener un mecanismo de enlace anti-sanguijuela. Se recomienda guardar la imagen y subirla directamente (img-X7n1n11W-1597520420651) (en-resource: // database / 2726: 1)]

Pros y contras

  • ventaja:
  1. Obviamente, la característica de la fábrica simple es "simple y grosera", a través de un método de fábrica que contiene parámetros, podemos instanciar cualquier categoría de producto, desde aviones y cohetes hasta fideos de papa.
  2. Entonces, la fábrica simple tiene un alias: clase de Dios.
  • Desventajas:
  1. Se puede producir cualquier subcategoría de "cosas", lo cual es demasiado pesado. Cuando hay muchos tipos de productos a producir, la cantidad de código en el método de fábrica puede ser enorme.
  2. Bajo la condición de seguir el principio de apertura y cierre (abierto para expansión, cerrado para modificación), Simple Factory no tiene poder para agregar nuevos productos. Porque agregar nuevos productos solo se puede lograr modificando el método de fábrica.

El método de fábrica puede resolver estas dos deficiencias de la fábrica simple. Entonces mira hacia abajo, a través de este tipo de aprendizaje progresivo, definitivamente lo entenderás a fondo.

Consejos: Spring resuelve las deficiencias de las fábricas simples mediante archivos de configuración y reflexión.

cómo utilizar

public class AnimalFactory {
    
    
    //简单工厂设计模式(负担太重、不符合开闭原则)
    public static Animal createAnimal(String name) {
    
    
        if ("cat".equals(name)) {
    
    
            return new Cat();
        } else if ("dog".equals(name)) {
    
    
            return new Dog();
        } else if ("cow".equals(name)) {
    
    
            return new Dog();
        } else {
    
    
            return null;
        }
    }
}

Método de fábrica

Se define una interfaz para crear objetos, pero la subclase determina qué clase instanciar. El método de fábrica difiere la instanciación de la clase a la subclase.

Icono

Inserte la descripción de la imagen aquí

Pros y contras

  • ventaja
  1. El patrón del método de fábrica es una buena manera de reducir la carga de la clase de fábrica y entregar un cierto tipo / cosa a una fábrica para su producción (correspondiente a las deficiencias de la fábrica simple 1.
  2. Al mismo tiempo, agregar un cierto tipo de "cosa" no necesita modificar la clase de fábrica, simplemente agregue una fábrica que produzca este tipo de "cosa", de modo que la clase de fábrica se ajuste al principio de abierto-cerrado.
  • Desventaja
  1. Es más complicado lidiar con determinadas situaciones que pueden formar una familia de productos (un grupo de productos).

Ejemplo

// 抽象出来的动物工厂----它只负责生产一种产品
public abstract class AnimalFactory {
    
    
    // 工厂方法
    public abstract Animal createAnimal();
}

// 具体的工厂实现类 
public class CatFactory extends AnimalFactory {
    
     
    @Override public Animal createAnimal() {
    
     
        return new Cat(); 
    } 
}

//具体的工厂实现类 
public class DogFactory extends AnimalFactory {
    
     
    @Override public Animal createAnimal() {
    
     
        return new Dog(); 
    } 
}

Patrón de fábrica abstracto

Proporcione una interfaz para crear familias de objetos relacionados o dependientes sin la necesidad de especificar clases específicas.

Por ejemplo, los automóviles se pueden dividir en automóviles, SUV, MPV, etc., así como en Mercedes-Benz, BMW, etc. Podemos considerar a todos los automóviles Mercedes-Benz como una familia de productos y a todos los automóviles BMW como otra familia de productos. Correspondiente a dos fábricas, una es una fábrica de Mercedes-Benz y la otra es una fábrica de BMW. A diferencia del método de fábrica, la fábrica de Mercedes-Benz no solo produce un producto específico, sino una familia de productos (Mercedes-Benz sedán, Mercedes-Benz SUV, Mercedes-Benz MPV). La "abstracción" de "fábrica abstracta" se refiere a esto. Es decir, en comparación con el método de fábrica, la fábrica abstracta define una serie de productos, más que un producto.

El patrón de método de fábrica anterior es un patrón de fábrica abstracto extremo (es decir, un patrón de fábrica abstracto que solo produce un producto), y el patrón de fábrica abstracto puede considerarse como una promoción del patrón de método de fábrica.

Icono

Inserte la descripción de la imagen aquí

Diferencia de modo de fábrica

  • Fábrica simple: utilice un objeto de fábrica para producir cualquier producto en la misma estructura jerárquica. (No admite expansión para aumentar productos)
  • Método de fábrica: utilice varios objetos de fábrica para producir los productos fijos correspondientes en la misma estructura jerárquica. (Soporte para expandir y aumentar productos)
  • Fábrica abstracta: utilice varios objetos de fábrica para producir todos los productos de diferentes familias de productos. (No admite la expansión y la adición de productos; admite la adición de familias de productos)

Principios de OO recién aprendidos hoy: confíe en la abstracción, no confíe en clases concretas

Supongo que te gusta

Origin blog.csdn.net/taurus_7c/article/details/107295308
Recomendado
Clasificación