Cómo crear clases factoría sin usar if-else
java planeta-codigo programacion
En el artículo cómo crear clases factoría sin usar if-else se comentan varias formas para conseguirlo. Las soluciones que se proponen son usar:
- Reflection: sin embargo esta solución obliga a que el cliente de la factoría conozca el nombre completo de la clase a crear incluyendo el paquete en el que está y hace que la factoría no abstraiga al cliente de conocerlo que puede ser uno de sus objetivos. Además el parámetro es un String con lo que en los refactors el compilador no nos ayudará, el compilador es una de mis 10 razones para seguir usando Java.
- Map: en esta solución se asocia una clave (en String) con la clase que devuelve la factoría. Igualmente usar un String como clave es algo a evitar ya que es propenso a errores al no tener ayuda del compilador en los valores de los Strings si estas cambian.
- Enum: en esta solución para eliminar los if-else se aprovecha de la propiedad del polimorfismo de los lenguajes orientados a objetos. El tipo Enum usado tiene un método que es implementado en cada uno de los tipos concretos de enum, en función de que utilice se crea la instancia adecuada del objeto.
Hay que notar otra diferencia entre la soluciones con if-else, Reflection y Enum y por otra parte la solución con Map y es que en el ejemplo las tres primeras crean una nueva instancia del validador cada vez que se llama a newInstance mientras que en la solución Map solo devuelve la instancia puesta en el mapa.
Continuar leyendo...