Ocasiones aplicables:
7.3 Ocasiones aplicables para el modelo de fábrica
La forma más fácil de crear un nuevo objeto es usar la nueva palabra clave y clases concretas. Solo en algunas ocasiones la complejidad adicional de crear y mantener una fábrica de objetos vale la pena el dinero. Esta sección resume estas ocasiones.
7.3.1 Implementación dinámica
Si necesita crear objetos que implementen la misma interfaz de diferentes maneras, como el ejemplo de bicicleta anterior, puede usar un método de fábrica o un objeto de fábrica simple para simplificar el proceso de selección de la implementación. Esta elección se puede hacer explícita o implícitamente. El primero es como el ejemplo de bicicleta, y el cliente puede elegir el modelo de bicicleta que necesita; mientras que el ejemplo de fábrica XHR mencionado en la siguiente sección pertenece a la última. El tipo de objeto de conexión devuelto en este ejemplo depende del ancho de banda detectado y los factores de retraso de la red. En estas situaciones, generalmente tiene que lidiar con una serie de clases que implementan la misma interfaz y pueden tratarse por igual. Esta es la razón más común para usar el patrón de fábrica en JavaScript.
7.3.2 Guardar configuración sobrecarga
Si los objetos deben ser complejos y relevantes entre sí, usar el modo de fábrica puede reducir la cantidad de código requerido para cada objeto. Este efecto es particularmente prominente si esta configuración solo necesita realizarse una vez para todas las instancias de un tipo particular. Poner este código de configuración en el constructor de clase no es un enfoque eficiente, porque incluso si el trabajo de configuración se completa, el código aún se ejecutará cada vez que se cree una nueva instancia, y hacerlo distribuirá el código de configuración en diferentes clases. El método de fábrica es perfecto para esta ocasión. Se puede configurar a la vez antes de instanciar todos los objetos requeridos. No importa cuántas clases diferentes estén instanciadas, este método puede mantener el código de configuración en un solo lugar.
Esto es especialmente útil si la clase utilizada requiere que se cargue la biblioteca externa. Los métodos de fábrica pueden verificar estas bibliotecas y cargar dinámicamente las que no se encuentran. Estos códigos de configuración existen en un solo lugar, por lo que es mucho más conveniente modificarlos más tarde.
7.3.3 Haz un objeto grande con muchos objetos pequeños
El método de fábrica se puede usar para crear objetos que encapsulen muchos objetos más pequeños. Considere el constructor del objeto de bicicleta. Las bicicletas contienen muchos subsistemas más pequeños: ruedas, marcos, componentes de transmisión y frenos. Si no desea un fuerte acoplamiento entre un subsistema y un objeto más grande, pero desea elegir entre muchos subsistemas en tiempo de ejecución, entonces el enfoque de fábrica es una opción ideal. Usando esta tecnología, algún día puede igualar todas las bicicletas que vende con algún tipo de cadena, y si encuentra otra cadena más favorita al día siguiente, puede usar esta nueva variedad. Es fácil implementar este cambio porque los constructores de estas clases de bicicletas no dependen de una variedad de cadena particular. El ejemplo del lector RSS más adelante en este capítulo demuestra el uso del modelo de fábrica a este respecto.
El patrón de fábrica proporciona principalmente una interfaz para crear objetos. El modelo de fábrica se divide en tres categorías de acuerdo con los términos en "Java and Pattern":
1. Fábrica simple
2. Método de fábrica
3. Fábrica abstracta
Estos tres patrones son abstractos gradualmente de arriba a abajo y son más generales. También hay un método de clasificación, que es considerar el modelo de fábrica simple como un caso especial del modelo de método de fábrica, y los dos se clasifican en la misma categoría. Aquí hay dos situaciones en las que se usa el modo de fábrica:
1. Al codificar, no puede prever qué tipo de instancias necesita crear.
2. El sistema no debe confiar en detalles sobre cómo se crean, combinan y expresan las instancias de la clase de productos.
3. Modelo de fábrica simple
Como su nombre indica, este modelo en sí es simple y se usa en situaciones en las que el negocio es más simple.
Consiste en tres roles (ver el diagrama de clases a continuación para la relación):
1. En Java a menudo es implementado por una clase concreta.
2. Rol de producto abstracto: generalmente es una clase principal heredada por un producto específico o una interfaz implementada. Implementado por interfaces o clases abstractas en Java.
3. Rol de producto específico: El objeto creado por la clase de fábrica es una instancia de este rol. Implementado por una clase concreta en Java.
Entonces, ¿cómo usar el modelo simple de fábrica? Déjame darte un ejemplo. ¡Creo que esto es mucho más fácil de entender que una larga descripción del texto teórico! Aquí está el tratamiento para la rica Nouveau: P
Después de usar el modelo de fábrica simple, el Nouveau Riche ahora solo necesita sentarse en el automóvil y decirle al conductor: "Conducir". Veamos cómo se implementa:
// Rol de producto abstracto CAR Public Interface {public void Drive (); } // Rol de producto específico de clase pública Benz implementa automóvil {public void Drive () {System.out.println ("Driving Benz"); }} public class BMW implementa automóvil {public void Drive () {System.out.println ("impulsar BMW"); }}. . . (No escribiré Audi: P) // Factory Clase Role Public Class Driver {// Método de fábrica // Tenga en cuenta que el tipo de retorno es rol de producto abstracto Public Static Car DriverCar (String s) arroja una excepción {// juzga la lógica, devuelve el papel de producto específico al cliente if (s.equalSignorecase ("benz")) return New benz (); else if (s.equalSignorecase ("bmw")) return nuevo bmw (); ...... Else Throw New Exception (); . . . // Da la bienvenida a la rica Nouveau para que aparezca ... magnate de clase pública {public static void main (string [] args) {try {// dígale al conductor que estoy tomando un auto Mercedes-Benz Car = Driver.drivercar ("Benz"); // Da el comando: Drive (); . .Si coloca todas las clases en un archivo, no olvide que solo una clase se declara pública. La relación entre clases en un programa es la siguiente:
Este es el simple modelo de fábrica. Aquí están los beneficios:
En primer lugar, después de usar el modelo de fábrica simple, nuestro programa no está "enfermo" y está más en línea con la realidad; y el cliente está exento de la responsabilidad de crear directamente objetos de productos, pero solo es responsable de "consumir" productos (como lo hace el Nouveau Riche).
Analicemos el modelo de fábrica simple del principio de apertura y cierre. Cuando el Nouveau Riche agrega un automóvil, siempre que cumpla con el contrato formulado por el producto abstracto, el cliente puede usarlo siempre que se notifique a la fábrica. Entonces, para la parte del producto, se ajusta al principio de apertura y cierre: la apertura de la expansión y el cierre para la modificación; Pero la parte de la fábrica parece no ser ideal, porque cada vez que se agrega un automóvil, la lógica comercial y la lógica de juicio correspondientes deben agregarse a la clase de fábrica, que naturalmente viola el principio de apertura y cierre.
Para tal clase de fábrica (en nuestro caso para el conductor), lo llamamos la clase todopoderosa o la clase de Dios.
El ejemplo que damos es el caso más simple, y en aplicaciones prácticas, es probable que el producto sea una estructura de árboles múltiples. Dado que solo hay una clase de fábrica en el modelo de fábrica simple que corresponde a estos productos, esto puede arruinar nuestra clase de Dios y, a su vez, agotar a nuestros encantadores programadores :(
Como mencioné anteriormente, el modelo de fábrica simple es adecuado para situaciones en las que el negocio será simple. Pero puede que no sea muy adaptable a entornos comerciales complejos. ¡Esto debe hacerse por el modelo de método de fábrica! !
4. Modelo de método de fábrica
Primero echemos un vistazo a su composición:
1. Rol de fábrica abstracta: este es el núcleo del patrón de método de fábrica, no tiene nada que ver con la aplicación. Es una interfaz que debe implementar un rol de fábrica específico o una clase principal que debe ser heredada. En Java se implementa por clases o interfaces abstractas.
2. Rol de fábrica específico: contiene un código relacionado con la lógica comercial específica. Llamado por la aplicación para crear el objeto de producto específico correspondiente. En Java se implementa por clases concretas.
3. Rol de producto abstracto: es la clase principal heredada por un producto específico o una interfaz implementada. En Java, generalmente hay clases o interfaces abstractas para implementarlas.
4. Rol de producto específico: El objeto creado por un rol de fábrica específico es un ejemplo de este rol. Implementado por clases concretas en Java.
Use diagramas de clase para representar claramente la relación entre ellos:
Usemos un ejemplo completo para ver cómo se coordinan los diversos roles en el modelo de fábrica. Hablando del negocio de Nouveau Riche, más y más autos aman. Esto hizo que el conductor sufriera. Tenía que recordar y mantener cualquier automóvil, ¡y tuvo que usarlo! Entonces, el Nouveau Riche simpatizó con él y dijo: Depende de sus años conmigo, no tendrá que trabajar tan duro en el futuro. Te asignaré algunos miembros del personal, ¡solo cuiden de ellos! Por lo tanto, surgió la gestión del modelo de método de fábrica. El código es el siguiente:
// Roles de productos abstractos, los roles específicos de productos son similares al modelo simple de fábrica, pero se han vuelto un poco más complicados, aquí se omite un poco. // controlador de interfaz de rol de fábrica de fábrica {Public Car DriverCar (); } public class BenzDriver implementa el controlador {public Car DriverCar () {return new benz (); }} public class BMWDriver implementa el controlador {Public Car DriverCar () {return new bmw (); }} ...... // Debe formar una relación correspondiente con el producto específico, aquí ... // Pídale al Sr. Nouveaux a magnate de clase pública {public static void main (string [] args) {try {controlador controlador = new BenzDriver (); Coche de coche = conduct.driverCar (); car.drive (); } catch (excepción e) {}}}El método de fábrica utiliza un papel de fábrica abstracto como el núcleo en lugar de usar clases concretas como el núcleo en un patrón de fábrica simple. Echemos un vistazo a lo que nos ha traído el modelo de método de fábrica. Use el principio de apertura y cierre para analizar el modelo de método de fábrica. Cuando se genera un nuevo producto (es decir, el automóvil del Nouveau Riche), siempre que se genere de acuerdo con el contrato proporcionado por el rol del producto abstracto y el rol de fábrica abstracta, el cliente puede usarlo sin tener que modificar ningún código existente. ¡Parece que el modelo de método de fábrica está completamente en línea con el principio de apertura y cierre!
El uso del modelo de enfoque de fábrica es suficiente para hacer frente a la mayoría de las necesidades comerciales que podemos encontrar. Sin embargo, cuando hay muchos tipos de productos, aparecerá una gran cantidad de categorías de fábrica correspondientes, que no deberían ser lo que esperamos. Por lo tanto, sugiero usar un patrón de fábrica simple en este caso combinado con el patrón del método de fábrica para reducir la clase de fábrica: es decir, usar un patrón de fábrica simple para especies similares en el árbol de productos (generalmente aquellos que son hermanos en las hojas del árbol).
Por supuesto, las circunstancias especiales deben tratarse con un tratamiento especial: para diferentes árboles de productos en el sistema y hay familias de productos en los árboles de productos, entonces en este caso, se puede usar el modelo de fábrica abstracta.
5. Resumen
Echemos un vistazo a la inspiración dada por el modelo simple de fábrica y el modelo de método de fábrica:
Si no usamos el patrón de fábrica para implementar nuestro ejemplo, tal vez el código sea mucho menos, solo implementa el automóvil existente, sin usar polimorfismo. Pero en términos de mantenimiento, la escalabilidad es muy pobre (puede imaginar la clase que desea tocar después de agregar un automóvil). Por lo tanto, para mejorar la escalabilidad y el mantenimiento, vale la pena escribir más código.
6. Patrón de fábrica abstracta
Primero comprendamos qué es una familia de productos: una familia de productos compuestos por funciones que se encuentran en diferentes jerarquías y estructuras de productos. Si puede comprender claramente este concepto solo leyendo esta oración, tengo que admirarlo. Usemos un ejemplo para ilustrarlo vívidamente.
BMWCAR y Benzcar en la figura son dos árboles de productos (jerarquía de productos); Mientras que Benzsportscar y BMWSportscar, como se muestra en la figura, son una familia de productos. Todos se pueden colocar en la familia de autos deportivos, por lo que las funciones están relacionadas. Del mismo modo, BMWBussinessCar y Benzsportscar también son la misma familia de productos.
Volviendo al tema del modelo de producto abstracto, se puede decir que la diferencia entre TI y el modelo de método de fábrica radica en la complejidad de la necesidad de crear objetos. Además, el modelo de fábrica abstracta es el más abstracto y general entre los tres. El propósito del patrón de fábrica abstracta es proporcionar una interfaz al cliente para crear objetos de productos en múltiples familias de productos. Además, las siguientes condiciones deben cumplirse al usar el patrón de fábrica abstracta:
1. Hay múltiples familias de productos en el sistema, y el sistema solo puede consumir uno de los productos a la vez.
2. Use productos que pertenecen a la misma familia de productos.
Echemos un vistazo a los diversos roles del patrón de fábrica abstracta (como exactamente lo mismo que el método de fábrica):
Rol de fábrica abstracta: este es el núcleo del patrón del método de fábrica, no tiene nada que ver con la aplicación. Es una interfaz que debe implementar un rol de fábrica específico o una clase principal que debe ser heredada. En Java se implementa por clases o interfaces abstractas.
Rol de fábrica específico: contiene un código relacionado con la lógica comercial específica. Llamado por la aplicación para crear el objeto de producto específico correspondiente. En Java se implementa por clases concretas.
Rol de producto abstracto: es la clase principal o la interfaz de implementación de la herencia específica del producto. En Java, generalmente hay clases o interfaces abstractas para implementarlas.
Rol de producto específico: El objeto creado por un rol de fábrica específico es una instancia de este rol. Implementado por clases concretas en Java.
Después de leer los dos primeros modos, debería tener una idea clara de la coordinación entre los diversos personajes en este modo, por lo que no daré ejemplos específicos. Es solo que debe prestar atención a cumplir con las condiciones para usar el modelo de fábrica abstracta, de lo contrario, incluso si hay múltiples árboles de productos, todavía hay familias de productos, pero no se pueden usar.
El artículo anterior tiene una comprensión profunda de los tres modelos de fábrica de Java. Este es todo el contenido que comparto con ustedes. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.