Definición: proporciona una interfaz para crear un conjunto de objetos relacionados o interdependientes sin especificar sus clases concretas.
Tipo: Crear diagrama de clase de patrón de clase:
La diferencia entre el patrón de fábrica abstracta y el patrón de método de fábrica
Resumen Factory Pattern es una versión actualizada del patrón de método de fábrica, que se utiliza para crear un conjunto de objetos relacionados o interdependientes. La diferencia entre TI y el modelo de método de fábrica es que el modelo de método de fábrica se dirige a una estructura de jerarquía de productos; mientras que el modelo de fábrica abstracto se dirige a múltiples estructuras de jerarquía de productos. En la programación, una estructura de producto generalmente se manifiesta como una interfaz o clase abstracta. Es decir, todos los productos proporcionados por el modelo de método de fábrica se derivan de la misma interfaz o clase abstracta, mientras que los productos proporcionados por el modelo de fábrica abstracta se derivan de diferentes interfaz o clase abstracta.
En el modelo de fábrica abstracta, existe un concepto de familia de productos: la llamada familia de productos se refiere a una familia de productos compuestos por productos funcionalmente relacionados en diferentes jerarquías de productos. La serie de productos proporcionados por el modelo de fábrica abstracta forman una familia de productos; mientras que la serie de productos proporcionados por el método de fábrica se denomina estructura jerárquica. Todavía usamos el ejemplo de producir autos para ilustrar la diferencia entre ellos.
En el diagrama de clase anterior, el hatchback y el sedán se llaman dos estructuras jerárquicas diferentes; Mientras que 2.0 los automóviles de desplazamiento y los automóviles de desplazamiento 2.4 se llaman dos familias de productos diferentes. Para ser más específicos, el hatchback de desplazamiento de 2.0 y el hatchback de desplazamiento de 2.4 pertenecen a la misma estructura de nivel, el sedán de desplazamiento de 2.0 y el sedán de desplazamiento 2.4 pertenecen a otra estructura de nivel; mientras que el hatchback de 2.0 desplazamiento y el sedán de desplazamiento 2.0 pertenecen a la misma familia de productos, y el hatchback de 2.4 desplazamiento y el sedán de 2.4 desplazamiento pertenecen a otra familia de productos.
Una vez que comprenda los conceptos de estructura jerárquica y familia de productos, comprenderá la diferencia entre el modelo de método de fábrica y el modelo de fábrica abstracta. Si todos los productos de la fábrica pertenecen a la misma estructura jerárquica, pertenecen al modelo de método de fábrica; Si los productos de la fábrica provienen de múltiples estructuras jerárquicas, pertenecen al modelo de fábrica abstracta. En este ejemplo, si un modelo de fábrica proporciona un hatchback de desplazamiento 2.0 y un hatchback de desplazamiento 2.4, entonces pertenece al modelo de método de fábrica; Si un modelo de fábrica proporciona dos productos, 2.4 hatchback de desplazamiento y un sedán de desplazamiento 2.4, entonces este modelo de fábrica es un modelo de fábrica abstracta, porque los productos que proporciona pertenecen a dos estructuras jerárquicas diferentes. Por supuesto, si una fábrica proporciona productos de los cuatro modelos, debido a que los productos pertenecen a dos estructuras jerárquicas, ciertamente pertenecerá al modelo de fábrica abstracta.
Ejemplo
Veamos el ejemplo de clase abstracta de la clase de fábrica:
paquete AbstractFactory; public abstract class abstractCreator {// Crear un método de producto Public Abstract AbstractProductA CreatePRODUCTA (); // Crear B Método de producto B Public Abstract AbstractProductB CreateProductB ();}Clase abstracta de producto a
paquete AbstractFactory; Public Abstract Class AbstractProductA {// Método compartido por el producto A public void Sharemethod () {System.out.println ("Método de procesamiento lógico de negocios compartido por el producto a ..."); } // Método Diferentes subproductos del producto Un abstracto público Void Dosomething (); }Clase abstracta de productos b
paquete AbstractFactory; Public Abstract Class AbstractProductB {// Método compartido por el producto B public void Sharemethod () {System.out.println ("Método de procesamiento lógico empresarial compartido por el producto B ..."); } // diferentes subproductos del producto b público abstracto vacío dosomething (); } Paquete de clase de implementación de fábrica AbstractFactory; Public Class Creator1 extiende AbstractCreator {@Override public abstractProductA CreatePRODUCTA () {return new ProductA1 (); } @Override public AbstractProductB CreatePRODUCTB () {return new ProductB1 (); }} Paquete de clase de implementación de fábrica AbstractFactory; Public Class Creator2 extiende AbstractCreator {@Override public abstractProductA CreatePRODUCTA () {return new ProductA2 (); } @Override public abstractProductB CreateProductB () {return new ProductB2 (); }}Producto A1
paquete AbstractFactory; public class Producta1 extiende AbstractProductA {@Override public void dosomething () {System.out.println ("Método de procesamiento lógico empresarial del producto A1 ..."); }}Producto A2
paquete AbstractFactory; public class Producta2 extiende AbstractProductA {@Override public void dosomething () {System.out.println ("Método de procesamiento lógico empresarial del producto A2 ..."); }}Producto B1
paquete AbstractFactory; Public Class ProductB1 extiende AbstractProductB {@Override public void dosomething () {System.out.println ("B1's Business Logic Processing Method ..."); }}Producto B2
paquete AbstractFactory; Public Class ProductB2 extiende AbstractProductB {@Override public void dosomething () {System.out.println ("B2's Business Logic Processing Method ..."); }} Ventajas del patrón de fábrica abstracta
Además de tener las ventajas del modelo de método de fábrica, la ventaja más importante del modelo de fábrica abstracta es que puede restringir a la familia del producto dentro de la clase. La llamada familia de productos generalmente tiene una cierta relación en mayor o menor medida. El modelo de fábrica abstracta puede definir y describir la relación entre la familia del producto dentro de la clase sin tener que introducir una nueva clase específicamente para la gestión.
Desventajas del patrón de fábrica abstracta
Ampliar a la familia del producto será una tarea muy laboriosa. Si se necesita agregar un nuevo producto a la familia del producto, casi todas las clases de fábrica deben modificarse. Por lo tanto, cuando se usa el modelo de fábrica abstracta, la división de la estructura de la jerarquía de productos es muy importante.
Escenarios aplicables
Los patrones de fábrica abstractos se pueden usar cuando los objetos a crear son una serie de familias de productos interrelacionados o interdependientes. Para decirlo más claramente, en un sistema de herencia, si existen múltiples estructuras jerárquicas (es decir, existen múltiples clases abstractas), y existen ciertas correlaciones o restricciones entre las clases de implementación divididas en cada estructura jerárquica, se puede usar el modelo de fábrica abstracta. Es más apropiado usar múltiples fábricas independientes para crear productos si no hay asociaciones o restricciones entre las clases de implementación en cada jerarquía.
Resumir
Ya sea el modelo simple de fábrica, el modelo de método de fábrica o el modelo de fábrica abstracta, todos pertenecen al modelo de fábrica y son muy similares en forma y características. Su objetivo final es desacoplar. Al usarlo, no tenemos que importarnos si este patrón es un método de fábrica o modelo de fábrica abstracta, porque la evolución entre ellos a menudo es difícil de entender. A menudo encontrará que cuando llegue un nuevo requisito, se realiza una pequeña modificación y se agrega un nuevo método, los productos en la clase forman la familia de productos en diferentes estructuras jerárquicas, se convierte en el modelo de fábrica abstracta; Y para el modelo de fábrica abstracta, cuando se reduce un método para hacer que los productos proporcionen ya no formen la familia de productos, evoluciona hacia el modelo de método de fábrica.
Por lo tanto, al usar el modo de fábrica, solo necesita preocuparse si se ha logrado el propósito de reducir el acoplamiento.