Вы думаете об этом неправильно. Независимо от того, используете ли вы интерфейс или абстрактный класс, вы должны принять решение при создании объекта. Позже, когда вы решите его построить, вы будете использовать абстрактный заводский шаблон.
Они просто показывали, что могут обрабатывать любую форму абстракции. Интерфейс, как правило, рассматривается как «лучше», поскольку он допускает более слабую связь, не заставляя конструктора и не использовать вашу связь наследования. Тем не менее, еще реже использовать фабрику для возврата интерфейса, поскольку обычно вы хотите дать возможность людям внедрить собственную реализацию интерфейсов, что традиционно не является образцом заводской схемы (хотя это, безусловно, может быть)
Существует одно конкретное преимущество использования интерфейсов, о которых я могу думать; вы можете реализовать два разных интерфейса с одним и тем же классом. Вот (довольно глупо) пример:
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;
}
}
большой имя пользователя лол – jaywon