Los patrones de diseño esta divididos en tres categorías: creaciónestructural y de comportamiento.

El patrón de diseño Factory Method, es un patrón de la categoría «creación», como puede ser factoría abstracta. Citando GOF, el propósito de factory method es definir una interfaz para crear un objeto, pero deja que sean las subclases quienes decidan que clase instancias (factory method)

Como en el patrón factoría abstracta, este también nos proporciona dos abstracciones:

  • InterfazObjeto Interfaz común para los objetos que creara nuestra factoría
  • Interfaz/abstracto Creador: Interfaz que declara la firma de nuestra factoría o como alternativa, implementa un método privado que resuelve el objeto que usaremos y luego un método a implementar por la factoría concreta

ESCENARIO

Tenemos una aplicación donde codificamos el texto, concretamente con SHA-X. No solo usamos SHA-1 o SHA-256, sino dependiendo del cliente, ejecutamos una u otra.

Este cliente nos dará, el tipo de algoritmo que vamos ha aplicar y un texto plano que debemos codificar. En esta situación usaremos factory method, donde nuestro método de factoría nos devolverá un tipo de objeto algoritmo, el cual usaremos para pasarle el texto a codificar.

  • Para entender estos patronos os aconsejo que practiquéis, implementando y modificando cada uno de ellos para entenderlos y que sea una aplicación de patrones natural y custom

CUANDO USARLO

  • Si necesitas que una familia de objetos delégen la responsabilidad en una de entre varias clases auxiliares o de propósito «helper».
  • Cuando la clase no sabe prever que objetos debe crear

ESTRUCTURA

Factory method
Alternativa

ACTORES

  • InterfazObjeto Interfaz común para los objetos que creara nuestra factoría
  • ObjetoConcreto: Objeto concreto que sera instanciado por nuestra factoría
  • InterfazCreador: Interfaz que declara la firma de nuestra factoría
  • CreadorConcreto: Implementación de nuestro método que creara nuestro objeto concreto según criterio

VENTAJAS E INCONVENIENTES

Como ventaja, podemos decir que no necesitamos acoplarnos a ninguna implementación concreta, ya que trabajaremos siempre con interfaces.

Como inconveniente, debemos heredar de la clase creator para genera un producto en concreto, si es necesario la herencia el inconveniente es menor, pero sino es así, generamos un nuevo acoplamiento que puede ser susceptible a cambios.

IMPLEMENTACIÓN

Escribe la leyenda…

Deja una respuesta