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