Я хочу, чтобы избежать использования меток классов и больших if-else блоков или оператора switch и использовать полиморфизм с иерархией классов, что, я считаю, лучше практики.создание объектов и полиморфизм
Например, что-то вроде ниже, где выбор выполненного метода зависит только от одного поля объекта типа Actor.
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();
[...]
}
}
так, кажется, что ничего действительно накоплен; логика только что была перемещена.
Что такое лучший способ сделать это? Единственный способ, с помощью которого я могу придумать, - внедрить фабричный класс для каждого подкласса Актера, но это кажется довольно громоздким для такой простой проблемы.
Я переусердствовал это? Кажется, что нет смысла делать первоначальное изменение, если я просто делаю почти то же самое в другом месте.
Извините, для уточнения, я хочу выбрать, какой подкласс создать для выполнения во время выполнения, а не во время компиляции, как в вашем примере. Для этого требуется большой переключатель или блок if-else, который я хотел бы избежать. Я начинаю думать, что это не обязательно, потому что это понадобится только при создании. – flowsnake
Hmm..actually фабрика имеет немного сделать w/compile vs экземпляр времени исполнения как таковой, а ответственность и контроль за созданием Актеров. Например, если вышеупомянутое создание Актеров произошло в Событии, не было бы это время выполнения? –
То, что вы делаете, - «решить», чтобы централизовать создание актеров. Хотите, чтобы актеры пришли с одного места, и в этом случае ... вы не можете обойти переключение ... потому что это решение конечный пользователь. –