Fábricas "singleton", ok ou ruins?

Eu tenho muitas fábricas (abstratas) e elas geralmente são implementadas como singletons.

Geralmente, para a conveniência de não ter que passar por camadas que realmente não têm negócios em usar ou conhecer essas fábricas.

Na maioria das vezes eu só preciso tomar uma decisão na inicialização de qual implementação de fábrica o resto do programa de código, talvez através de alguma configuração

parece, por exemplo gostar

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();
    ....

}

Alguma coisa cheira a isso, só não tenho certeza do que - talvez seja mais um global perturbado do que um singleton. Não é como se realmente houvessetem que ser apenas uma fábrica sempre criando ColumnCalculations - embora meus programas não precisem de mais.

Isso é considerado melhor prática? Devo preferir colocar isso em alguma classe (semi) global do AppContext? Algo mais (eu não estou totalmente pronto para mudar para algum contêiner IoC maior, ou spring.net ainda btw)?

questionAnswers(6)

yourAnswerToTheQuestion