Patrón de diseño del método de fábrica

Intención

  • Defina una interfaz para crear un objeto, pero deje que las subclases decidan qué clase instanciar. El método de fábrica permite que una clase difiera a subclases.
  • Definición de un constructor «virtual».
  • El operador new se considera dañino.

Problema

Un marco necesita estandarizar el modelo arquitectónico para una variedad de aplicaciones, pero permitir que las aplicaciones individuales definan sus propios objetos de dominio y proporcionen su instanciación.

Discusión

El método de fábrica consiste en crear objetos como el método de plantilla consiste en implementar un algoritmo. Una superclase especifica todo el comportamiento estándar y genérico (utilizando «marcadores de posición» virtuales puros para los pasos de creación) y luego delega los detalles de creación a las subclases que proporciona el cliente.

El método de fábrica hace que un diseño sea más personalizable y solo un poco más complicado. Otros patrones de diseño requieren nuevas clases, mientras que el método de fábrica solo requiere una nueva operación.

Las personas a menudo usan el método de fábrica como la forma estándar de crear objetos; pero no es necesario si: la clase de la que se crea una instancia nunca cambios, o la instanciación tiene lugar en una operación que las subclases pueden anular fácilmente (como una operación de inicialización).

Factory Method es similar a Abstract Factory pero sin las familias de énfasis.

Factory Methods son especificados de forma rutinaria por un marco arquitectónico y luego implementados por el usuario del marco.

Estructura

La implementación del Método de Fábrica discutido en el Grupo de los Cuatro (abajo) se superpone en gran medida con el de Abstract Factory. Por esa razón, la presentación de este capítulo se centra en el enfoque que se ha vuelto popular desde entonces.

Una definición cada vez más popular de fábrica El método es: un static método de una clase que devuelve un objeto de ese tipo «clase». Pero a diferencia de un constructor, el objeto real que devuelve podría ser una instancia de una subclase. A diferencia de un constructor, un El objeto existente se puede reutilizar, en lugar de crear un objeto nuevo. A diferencia de un constructor, los métodos de fábrica pueden tener nombres diferentes y más descriptivos (por ejemplo, Color.make_RGB_color(float red, float green, float blue) y Color.make_HSB_color(float hue, float saturation, float brightness)

El cliente está totalmente desacoplado de los detalles de implementación de las clases derivadas. Ahora es posible la creación polimórfica.

Ejemplo

El método Factory define una interfaz para crear objetos, pero permite que las subclases decidan qué clases instanciar. Las prensas de moldeo por inyección demuestran esta patrón. Los fabricantes de juguetes de plástico procesan polvo de moldeo de plástico e inyectan el plástico en moldes de las formas deseadas. La clase de juguete (coche, figura de acción, etc.) está determinada por el molde.

Lista de comprobación

  1. Si tiene una jerarquía de herencia que ejerce polimorfismo, considere agregar una capacidad de creación polimórfica definiendo un método de fábrica static en la clase base.
  2. Diseñar los argumentos al método de fábrica. ¿Qué cualidades o características son necesarias y suficientes para identificar la clase derivada correcta para instanciar?
  3. Considere diseñar un «grupo de objetos» interno que permitirá que los objetos se reutilicen en lugar de crearlos desde cero.
  4. Considere haciendo que todos los constructores sean private o protected.

Reglas generales

  • Las clases abstractas de Factory se implementan a menudo con los métodos de fábrica, pero se pueden implementar usando Prototype.
  • Los métodos de fábrica generalmente se llaman dentro de los métodos de plantilla.
  • Método de fábrica: creación a través de la herencia . Prototipo: creación a través de la delegación.
  • A menudo, los diseños comienzan usando el método de fábrica (menos complicado, más personalizable, las subclases proliferan) y evolucionan hacia AbstractFactory, Prototype o Builder (más flexible, más complejo) a medida que el diseñador descubre dónde más Se necesita flexibilidad.
  • El prototipo no requiere subclasificación, pero sí requiere una operación de inicialización. El método de fábrica requiere subclasificación, pero no requiere la inicialización.
  • La ventaja de un método de fábrica es que puede devolver la misma instancia varias veces, o puede devolver una subclase en lugar de un objeto de ese tipo exacto.
  • Algunos defensores del método de fábrica recomiendan que, como cuestión de diseño del lenguaje (o en su defecto, como cuestión de estilo ) absolutamente todos los constructores deben ser privados o estar protegidos. No es asunto de nadie más si una clase fabrica un objeto nuevo o recicla uno viejo.
  • El operador new consideró dañino. Existe una diferencia entre solicitar un objeto y crear uno. El operador new siempre crea un objeto y no encapsula la creación del objeto.Un método de fábrica refuerza esa encapsulación y permite que se solicite un objeto sin un acoplamiento inextricable al acto de creación.

¡Apoye nuestro sitio web gratuito y tenga el libro electrónico!

  • 22 patrones de diseño y 8 principios explicados en profundidad
  • 406 páginas bien estructuradas, fáciles de leer y sin jerga
  • 228 ilustraciones y diagramas claros y útiles
  • Un archivo con ejemplos de código en 4 idiomas
  • Todos los dispositivos compatibles: formatos EPUB / MOBI / PDF

Más información …

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *