Я хочу избежать использования помеченных классов и больших блоков if -else или оператора switch и вместо этого использовать полиморфизм с иерархией классов, что я считаю лучшей практикой.
Например, что-то вроде приведенного ниже, где выбор исполняемого метода зависит только от одного поля объекта типа Актер.
switch(actor.getTagField())
{
case 1: actor.act1(); break;
case 2: actor.act2(); break;
[...]
}
станет
actor.act();
, а метод акта будет переопределен в подклассах Актера.
Тем не менее, наиболее очевидный способ решить во время выполнения, какой подкласс создавать, выглядит ужасно похожим на исходный :
Actor newActor(int type)
{
switch(type)
{
case 1: return new Actor1();
case 2: return new Actor2();
[...]
}
}
, поэтому кажется, что на самом деле ничего не выиграно; логика только что была перемещена.
Как это лучше сделать? Единственный способ, который я могу придумать, включает реализацию фабричного класса для каждого подкласса Актера, но это кажется довольно громоздким для такой простой задачи.
Я слишком много думаю об этом? Просто кажется, что нет смысла вносить первоначальные изменения, если я просто делаю то же самое в другом месте.