Directorio de artículos
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
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.