[Patrones de diseño] Patrones creativos - Patrones de método de fábrica

Patrón creativo - Patrón de método de fábrica

1. Definición

El patrón de método de fábrica es un patrón de diseño creacional que proporciona un método para crear un objeto en la clase principal , lo que permite que la subclase determine el tipo del objeto instanciado.

En segundo lugar, el problema

Suponiendo que el transporte expreso de una empresa solo se transporta por tierra en camiones al principio, y luego, con el aumento en la cantidad de personas y la demanda, debe enviarse al extranjero, para aumentar la cantidad de barcos que se transportarán por mar, entonces necesitamos hacer cambios extensos en el código del programa, que obviamente no se ajusta al principio abierto-cerrado.

3. Soluciones

El patrón del método de fábrica es una buena solución a este problema. Use métodos especiales de fábrica en lugar de llamadas directas a constructores de objetos (nuevo objeto).

4. Realización

1. El producto
declara la interfaz. Estas interfaces son comunes a todos los objetos construidos por el creador y sus subclases.

package com.atmae.factory;

/**
 * @Author: Mae
 * @Date: 2022/4/6
 * @Time: 19:49
 * @Description:
 */
public interface Product {
    
    
    void deliver();
}

2. Un producto específico
es una realización diferente de la interfaz del producto.
camión:

package com.atmae.factory;

/**
 * @Author: Mae
 * @Date: 2022/4/6
 * @Time: 19:49
 * @Description:
 */
public class Truck implements Product{
    
    
    @Override
    public void deliver() {
    
    
        System.out.println("使用卡车在陆地运输");
    }
}

Barco:

package com.atmae.factory;

/**
 * @Author: Mae
 * @Date: 2022/4/6
 * @Time: 19:48
 * @Description:
 */
public class Ship implements Product{
    
    
    @Override
    public void deliver() {
    
    
        System.out.println("使用轮船在海上运输");
    }
}

3. Cree una
clase de fábrica para declarar un método de fábrica que devuelva un objeto de producto. El tipo de objeto de retorno del método debe coincidir con la interfaz del producto.

package com.atmae.factory;

/**
 * @Author: Mae
 * @Date: 2022/4/6
 * @Time: 19:47
 * @Description:
 */
public abstract class Factory {
    
    
  public abstract Product createProduct();
}

4. Clase de fábrica específica

El método de fábrica base se anulará para devolver un tipo diferente de producto.
paquete com.atmae.factory;

/**
 * @Author: Mae
 * @Date: 2022/4/6
 * @Time: 19:48
 * @Description:
 */
public class ShipFactory extends Factory{
    
    

    @Override
    public Product createProduct() {
    
    
        return new Ship();
    }
}
package com.atmae.factory;

/**
 * @Author: Mae
 * @Date: 2022/4/6
 * @Time: 19:48
 * @Description:
 */
public class TruckFactory extends Factory{
    
    
    @Override
    public Product createProduct() {
    
    
        return new Truck();
    }
}

5. Cliente

El cliente solo necesita usar la clase abstracta para crear la fábrica para implementar la fábrica concreta (polimorfismo), y la fábrica concreta devuelve el tipo de producto

package com.atmae.factory;

/**
 * @Author: Mae
 * @Date: 2022/4/6
 * @Time: 19:48
 * @Description:
 */
public class Client {
    
    
    public static void main(String[] args) {
    
    
        Factory factory=new ShipFactory();
        Product product = factory.createProduct();
        product.deliver();
    }
}

Cinco, diagrama UML

inserte la descripción de la imagen aquí

Seis, el patrón del método de fábrica es adecuado para la escena.

  • En el proceso de escribir código, si no se puede predecir la clase exacta de objetos y sus dependencias, se pueden usar métodos de fábrica.
  • Si desea reutilizar objetos existentes para ahorrar recursos del sistema, en lugar de volver a crear el objeto cada vez, puede usar el método de fábrica.
  • Quiere que los usuarios amplíen los componentes internos de su biblioteca o marco de software, puede usar métodos de fábrica

7. Resumen

ventaja

  • Principio de responsabilidad única. Puede colocar el código de creación de productos en una sola ubicación en su programa, lo que facilita el mantenimiento del código.
  • Principio cerrado abierto. Puede introducir nuevos tipos de productos en su programa sin cambiar el código de cliente existente.
  • Se puede evitar el estrecho acoplamiento entre las fábricas y los productos de hormigón.

defecto

  • Introduce muchas subclases nuevas, el código puede volverse más complejo como resultado

8. Comparación con otros modos

  • Con Simple Factory,
    Simple Factory es donde todos los productos son administrados por una fábrica, mientras que Factory Method es donde cada producto es administrado por diferentes fábricas, todas las cuales heredan de la clase de fábrica abstracta.
    Los métodos de fábrica trasladan la lógica interna de una fábrica simple al cliente. Agregar funcionalidad para modificar el cliente ya no es la clase de fábrica.

Supongo que te gusta

Origin blog.csdn.net/weixin_51799151/article/details/123997846
Recomendado
Clasificación