Абстрактный шаблон фабрики следует использовать в тех случаях, когда объекты, возвращаемые фабрикой, необходимо «инициализировать» по-разному таким образом, что только фабрика знает, как это сделать.Поэтому разные реализации ISomething будут «инициализированы» или созданы по-разному, и только их соответствующие реализации Factory знают, как это сделать.
В вашем случае вы должны спросить себя:
Do все реализации ISomethings нуждаются в IRepository, а также в runtimeValue ?.В этом случае вы можете просто использовать фабричный шаблон.
Используйте Abstract Factory в таком сценарии: (Нечто и Нечто создается по-разному)
interface IFactory {
ISomething Create(int runTimeValue);
}
class Factory : IFactory {
public ISomething Create(int runTimeValue) {
return new Something(repository, runTimeValue);
}
}
class OFactory : IFactory {
public ISomething Create(int runTimeValue) {
// constructor takes different parameters
SomeOtherthing thing = new SomeOtherthing("someValue", runtimeValue);
thing.SetCustomRepository(new OtherRepositoryImpl());
return thing;
}
}