Comments 7
Даже базовые конструкции if else являются фабричным методом, так как и switch.
Вы не могли бы развернуть это утверждение?
if (nameMob == "ogre")
{
return new MobModel(descriptions.ListOgre[level]);
}
if (nameMob == "troll")
{
return new MobModel(descriptions.ListTroll[level]);
}
тоже самое на swich
switch (nameMob)
{
case "ogre":
return new MobModel(descriptions.ListOgre[level]);
case "troll":
return new MobModel(descriptions.ListTroll[level]);
}
Не стоит забывать, что pattern лишь нечто каноническое, они лишь помогают выполнять работу объектов наиболее удобным и оптимальным способом, но и способов этих много. Это просто порождение других классов через нужные условия, а метод может быть реализован хоть абстрактной стандартной фабрикой.
Ну давайте, что ли, на примерах.
Является ли вот такой код фабричным методом?
public bool IsBig()
{
if (Length > 5)
return true;
else
return false;
}
А вот такой?
public void ReadABook()
{
Book book;
if (Hour > 17)
book = new EveningBook();
else
book = new DayBook();
book.Read()
}
указание типа
Наверное, все же, указание реализации.
Ну и про время исполнения тоже сложно — наверняка на шаблонах тоже можно запилить фабрику.
Я несколько раз начинал и стирал свой ответ пока не понял почему слово "реализация" в этом контексте мне не нравится.
В большинстве (наверное во всех, но я всех не знаю) ООП языках конструкторы не поддерживают полиморфизм. Соответсвенно фабрики используются для обхода этого ограничения. Полиморфный метод статически связывается с конкретным конструктором. Конструктор это атрибут типов, а не реализаций.
Есть и другие способы выбора реализации (даже если относится к термину очень вольно), например использовать делегаты вместо методов или даже просто через ветвление.
Поэтому мне кажется что слово "тип" тут больше подходит.
Factory pattern. Пример применения в Unity