En realidad, si desea obtener los beneficios de una clase de fábrica, necesita el método estático en su propia clase. Esto le permitirá luego crear nuevas clases de fábrica, o reconfigurar la existente para obtener diferentes comportamientos. Por ejemplo, una clase de fábrica podría crear unicornios que implementen la interfaz IFourHoovedAnimal. Es posible que tenga un algoritmo escrito que hace las cosas con IFourHoovedAnimal y necesita crear una instancia de ellos. Más tarde, puede crear una nueva clase de fábrica que, en su lugar, ejemplifique la versión de Pegaso, que también implementará la de IFourHoovedAnimal. El viejo algoritmo ahora puede ser reutilizado para Pegasus simplemente usando la nueva fábrica. Para que esto funcione, tanto PegasusFactory como UnicornFactory deben heredar de una clase base común (generalmente una clase abstracta).
Así que puede ver colocando el método estático en su propia clase de fábrica, puede cambiar las clases de fábrica por otras más nuevas para reutilizar los viejos algoritmos. Esto también funciona para mejorar la capacidad de prueba, porque ahora las pruebas unitarias pueden alimentarse en una fábrica que crea objetos falsos.
He hecho esto último antes (método de fábrica estático en la clase que está creando instancias) para proyectos muy pequeños, pero fue solo porque lo necesitaba para ayudar a refactorizar algunos códigos antiguos, pero mantener los cambios al mínimo . Básicamente, en ese caso, tuve en cuenta un fragmento de código que creó un grupo de controles ASP.NET, y metí todos esos controles en un control de usuario. Quería que mi nueva propiedad de control de usuario estuviera basada, pero era más fácil para el antiguo código heredado crear el control de usuario con un constructor basado en parámetros.
Así que creé un método de fábrica estático que tomaba todos los parámetros, y luego instanciaba el control de usuario y establecía sus propiedades en función de los parámetros. El antiguo código heredado usaba este método estático para crear el control del usuario, y el código futuro usaría las propiedades "más bonitas".
¿Por qué es más fácil de probar con un método no estático? –
elysium @devoured: por ejemplo, una clase de prueba puede incluir una subclase del original que anula el método, para instrumentación o cortocircuito en el comportamiento normal. Eso no es (fácilmente) posible con un método estático. –
elysium @devoured - Porque no se puede pasar una clase estática como parámetro a los métodos de prueba (al menos no bien). Esto está relacionado con el segundo punto sobre la inyección de dependencia. Pero, como dijo Jaxidian, estos puntos pueden no ser importantes. –