Вы думаете об этом неправильно. Используете ли вы интерфейс или абстрактный класс, должно быть решение, которое вы принимаете при создании сущности. Позже, когда вы решите построить его, вы будете использовать абстрактный шаблон фабрики.
Они просто показали, что он может справиться с любой формой абстракции. Интерфейс, как правило, рассматривается как «лучший», поскольку он позволяет более слабую связь, не форсируя конструктор и не используя вашу ссылку наследования. Однако также реже использовать фабрику для возврата интерфейса, так как обычно вы хотите дать людям возможность внедрять свои собственные реализации интерфейсов, что традиционно не является ролью фабричного шаблона (хотя, безусловно, это может быть) 1003 *
Есть одно конкретное преимущество использования интерфейсов, о котором я могу подумать; Вы можете реализовать два разных интерфейса с одним и тем же классом. Вот (довольно глупый) пример:
interface IProvideInfo {
string Get();
}
interface IProvideConnectionString : IProvideInfo { }
interface IProvideCurrentUserName : IProvideInfo { }
class CurrentContextProvider : IProvideConnectionString, IProvideCurrentUserName {
string IProvideConnectionString.Get() {
return ConfigurationManager.ConnectionStrings["db"];
}
string IProvideCurrentUserName.Get() {
return _currentUserName;
}
string _currentUserName;
public string SetCurrentUserName(string s) {
_currerntUserName = s;
}
}
public class InfoProviderFactory {
CurrentContextProvider _provider = new CurrentContextProvider()
public IProvideInfo GetProvider(string key) {
return _provider;
}
}