Los patrones de diseño esta divididos en tres categorías: creación, estructural 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
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…