Fabryki „Singleton”, ok lub złe?

Mam wiele (abstrakcyjnych) fabryk i zazwyczaj są one implementowane jako singletony.

Zazwyczaj dla wygody nie trzeba ich przekazywać przez warstwy, które naprawdę nie mają nic wspólnego z używaniem lub znajomością tych fabryk.

W większości przypadków muszę tylko podjąć decyzję o uruchomieniu implementacji fabrycznej pozostałej części programu kodu, być może za pomocą jakiejś konfiguracji

to wygląda na przykład lubić

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

}

Coś w tym pachnie, po prostu nie jestem pewien, co to jest - może bardziej zniechęcony świat niż singleton. To naprawdę nie takmusieć bądź tylko jedną fabryką, która kiedykolwiek tworzy obliczenia kolumn - chociaż moje programy nie potrzebują więcej.

Czy to jest uważane za najlepszą praktykę? Czy powinienem raczej wypuścić je w jakiejś (pół) globalnej klasie AppContext? Coś innego (nie jestem jeszcze całkiem gotowy, aby przejść do jakiegoś większego kontenera IoC, lub jeszcze spring.net całkiem btw)?