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