Definición: Defina una interfaz para crear un objeto, deja que la subclase decida qué clase instanciar, y el método de fábrica retrasa la instancia de una clase a su subclase.
Tipo: Crear diagrama de clase de patrón de clase:
Código de patrón de método de fábrica
interfaz iProduct {public void productMethod (); } El producto de clase implementa IProduct {public void productMethod () {system.out.println ("producto"); }} interfaz ifactory {public iProduct CreatePRODUCT (); } class Factory implementa ifactory {public IProduct CreateProduct () {return new Product (); }} Cliente de clase pública {public static void main (string [] args) {ifactory factory = new factory (); IProduct Produce = factory.createProduct (); produc.productMethod (); }} Modo de fábrica:
En primer lugar, necesitamos hablar sobre el modelo de fábrica. Los modos de fábrica se dividen en tres tipos de acuerdo con el grado de abstracción: modo de fábrica simple (también conocido como modo de fábrica estática), modo de método de fábrica descrito en este artículo y modo de fábrica abstracta. El modo de fábrica es un modelo que a menudo se usa en la programación. Sus principales ventajas son:
Puede hacer que la estructura del código sea clara y encapsular efectivamente los cambios. En la programación, la instanciación de las clases de productos a veces es compleja y cambiante. A través del modelo de fábrica, se encapsula la instancia de los productos, de modo que la persona que llama no necesita preocuparse por el proceso de instanciación del producto y simplemente confiar en la fábrica para obtener el producto que desean.
Bloquear categorías específicas de productos de la persona que llama. Si usa el modo de fábrica, la persona que llama solo se preocupa por la interfaz del producto. En cuanto a la implementación específica, la persona que llama no necesita preocuparse en absoluto. Incluso si se cambia la implementación específica, no tendrá impacto en la persona que llama.
Reducir el acoplamiento. La instanciación de las clases de productos suele ser muy complicada. Requiere confiar en muchas clases, y estas clases no necesitan ser conocidas por la persona que llama. Si se usa un método de fábrica, todo lo que necesitamos hacer es instanciar la clase de producto y luego entregarlo a la persona que llama para su uso. Para la persona que llama, las clases de las que depende del producto son transparentes.
Modo de método de fábrica:
A través del diagrama de clase del patrón de método de fábrica, podemos ver que el patrón del método de fábrica tiene cuatro elementos:
Interfaz de fábrica. La interfaz de fábrica es el núcleo del patrón de método de fábrica y se utiliza para proporcionar productos directamente con la persona que llama. En la programación real, una clase abstracta a veces se usa como una interfaz para interactuar con la persona que llama, que es esencialmente la misma.
Implementación de fábrica. En la programación, la implementación de fábrica determina cómo instanciar productos, que es una forma de lograr la expansión. El número de productos requeridos son tantas implementaciones específicas de fábrica como existentes.
Interfaz de producto. El objetivo principal de una interfaz de producto es definir las especificaciones del producto, y todas las implementaciones de productos deben cumplir con las especificaciones definidas por la interfaz del producto. Las interfaces de productos son lo que más les importa a las personas que les importa, y las ventajas y desventajas de las definiciones de interfaz de producto determinan directamente la estabilidad del código de la persona que llama. Del mismo modo, las interfaces de productos también pueden ser reemplazadas por clases abstractas, pero tenga cuidado de no violar el principio de reemplazo de Richter.
Implementación del producto. Las categorías específicas de las interfaces del producto determinan el comportamiento específico del producto en el cliente.
Ventajas del modelo de método de fábrica:
1. Buen empaque y reduzca el acoplamiento entre módulos;
2. Enfrentando interfaces de productos y categorías de productos de bloqueo.
3. Marco de desacoplamiento típico. Los módulos de alto nivel solo necesitan conocer la clase abstracta del producto.
4. CONFÍA CON LA LEY DIMITESA, el principio de dependencia de la inversión y el principio de reemplazo de Richter.
Escenarios aplicables:
Ya sea el modelo de fábrica simple, el modelo de método de fábrica o el modelo de fábrica abstracta, tienen características similares, por lo que sus escenarios aplicables también son similares.
Primero, como patrón de clase de creación, el patrón de método de fábrica se puede usar en cualquier lugar que se necesiten objetos complejos. Una cosa a tener en cuenta es que los objetos complejos son adecuados para usar el modo de fábrica, mientras que los objetos simples, especialmente los objetos que se pueden crear a través de nuevos, no necesitan usar el modo de fábrica. Si usa el modelo de fábrica, debe introducir una clase de fábrica, que aumentará la complejidad del sistema.
En segundo lugar, el modelo de fábrica es un modo de desacoplamiento típico, y la ley del dimitador es particularmente obvia en el modelo de fábrica. Si la persona que llama necesita agregar dependencias para ensamblar el producto por sí mismo, puede considerar usar el modelo de fábrica. Reducirá en gran medida el acoplamiento entre objetos.
Una vez más, dado que el modelo de fábrica se basa en la arquitectura abstracta, entrega la tarea de instanciar el producto a la clase de implementación para completar, lo que tiene una mejor escalabilidad. En otras palabras, cuando el sistema necesita ser más escalable, se puede considerar el modelo de fábrica y se pueden ensamblar diferentes productos con diferentes fábricas de implementación.
Aplicaciones típicas
Para ilustrar las ventajas del modelo de fábrica, puede que no haya un ejemplo más apropiado que ensamblar un automóvil. El escenario es así: el automóvil consiste en un motor, ruedas y un chasis, y ahora es necesario armar un automóvil y entregarlo a la persona que llama. Si no se usa el modo de fábrica, el código es el siguiente:
Class Engine {public void getStyle () {System.out.println ("Este es el motor del automóvil"); }} class Underpan {public void getStyle () {System.out.println ("Este es el chasis del automóvil"); }} rueda de clase {public void getStyle () {System.out.println ("Este es el neumático del automóvil"); }} Cliente de clase pública {public static void main (string [] args) {Engine Engine = new Engine (); Underpan underpan = new Underpan (); Rueda rueda = nueva rueda (); CAR ICAR = auto nuevo (Underpan, rueda, motor); car.show (); }}Se puede ver que para ensamblar el automóvil, la persona que llama también necesita instanciar el motor, el chasis y los neumáticos, y los componentes de estos automóviles son independientes de la persona que llama, lo que viola seriamente la ley Dimitt y tiene un acoplamiento demasiado alto. Y es muy desfavorable a la expansión. Además, en este ejemplo, el motor, el chasis y los neumáticos son relativamente específicos. En aplicaciones reales, los componentes de estos productos pueden ser abstractos, y la persona que llama no tiene idea de cómo ensamblar el producto. Si se utiliza el método de fábrica, toda la arquitectura parecerá mucho más clara.
interfaz ifactory {public ICAR CreateCar (); } class Factory implementa ifactory {public ICAR CreateCar () {Engine Engine = New Engine (); Underpan underpan = new Underpan (); Rueda rueda = nueva rueda (); CAR ICAR = auto nuevo (Underpan, rueda, motor); coche de regreso; }} Cliente de clase pública {public static void main (string [] args) {ifactory factory = new factory (); Icar car = factory.createCar (); car.show (); }}Después de usar el método de fábrica, el grado de acoplamiento en el lado de la llamada se reduce considerablemente. Y para las fábricas, se puede ampliar. Si desea reunir otros autos en el futuro, solo necesita agregar otra implementación de fábrica. Tanto la flexibilidad como la estabilidad se han mejorado considerablemente.
PS: modo de método de fábrica y modo de fábrica simple
El simple modelo de fábrica mencionado anteriormente es muy similar al modelo de método de fábrica. El núcleo de la clase de método de fábrica es una clase de fábrica abstracta, mientras que el modelo de fábrica simple coloca el núcleo en una clase concreta. La diferencia en el modelo de método de fábrica y el modelo simple de fábrica no es muy obvia.