Fábricas de "Singleton", bien o mal?

Tengo muchas fábricas (abstractas) y normalmente se implementan como singletons.

Por lo general, para la comodidad de no tener que pasarlos a través de capas que realmente no tienen nada que ver con el uso o el conocimiento de estas fábricas.

La mayoría de las veces solo necesito tomar una decisión al inicio de qué implementación de fábrica el resto del programa de código, tal vez a través de alguna configuración

se ve por ejemplo me gusta

abstract class ColumnCalculationFactory { 
  private static ColumnCalculationFactory factory;

 public static void SetFactory(ColumnCalculationFactory f) {
         factory = f;
  }

  public static void Factory() {
         return factory;
  }

 public IPercentCalculation CreatePercentCalculation();
 public IAverageCalculation CreateAverageCalculation();
    ....

}

Algo huele a esto, simplemente no estoy seguro de qué. Es tal vez más un disuised global que un singleton. No es como si realmenteTiene que ser solo una fábrica que haya creado ColumnCalculations, aunque mis programas no necesitan más.

¿Esto se considera la mejor práctica? ¿Debería poner esto en alguna clase de AppContext (semi) global? ¿Algo más (todavía no estoy listo para cambiarme a un contenedor IoC más grande, o spring.net bastante por cierto)?

Respuestas a la pregunta(6)

Su respuesta a la pregunta