«Синглтон» заводы, хорошо или плохо?
У меня много (абстрактных) фабрик, и они обычно реализуются как синглтоны.
Обычно для удобства не нужно проходить их через слои, которые действительно не имеют никакого отношения к использованию или знанию этих фабрик.
В большинстве случаев мне нужно только принять решение при запуске, какая фабричная реализация остальной части кода программы, может быть, через какую-то конфигурацию
это выглядит, например, любить
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();
....
}
Кто-то пахнет по этому поводу, я просто не уверен, что - это может быть скорее замаскированный глобал, чем синглтон. Это не так, как на самом делеиметь быть только одной фабрикой, когда-либо создававшей ColumnCalculations - хотя моим программам больше не нужно.
Это считается лучшей практикой? Должен ли я добавить их в некоторый (полу) глобальный класс AppContext? Что-то еще (я не совсем готов переключиться на какой-нибудь более крупный контейнер IoC или Spring.net, кстати, пока что)?