El patrón Método de fábrica abstrae el proceso de toma de decisiones de la clase que llama. Esto tiene varias ventajas:
Reutilizar. Si quiero crear instancias en muchos lugares, no tengo que repetir mi condición, así que cuando vengo a agregar una nueva clase, no corro el riesgo de perderme una.
Capacidad de prueba de la unidad. Puedo escribir 3 pruebas para la fábrica, para asegurarme de que devuelve los tipos correctos en las condiciones correctas, entonces mi clase de llamada solo necesita ser probada para ver si llama a la fábrica y luego los métodos requeridos en la clase devuelta. No necesita saber nada sobre la implementación de la propia fábrica o las clases concretas.
Extensibilidad. Cuando alguien decide que necesitamos agregar una nueva clase D a esta fábrica, ninguno de los códigos de llamada, ni las pruebas unitarias o la implementación, necesitan ser informados. Simplemente creamos una nueva clase D y ampliamos nuestro método de fábrica. Esta es la definición misma del Principio Abierto-Cerrado .
Incluso puede crear una nueva clase de fábrica y hacer que sean intercambiables en caliente, si la situación lo requiere, por ejemplo, si desea poder activar y desactivar la clase D, durante la prueba. Me he encontrado con esta situación solo una vez, pero fue extremadamente útil.
Como se ha dicho, el patrón de fábrica no siempre es el camino a seguir. Pero, donde sea que veas una instanciación condicional, debes pensarlo un momento.