создание объектов и полиморфизм

Я хочу избежать использования помеченных классов и больших блоков 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();
        [...]
    }
}

, поэтому кажется, что на самом деле ничего не выиграно; логика только что была перемещена.

Как это лучше сделать? Единственный способ, который я могу придумать, включает реализацию фабричного класса для каждого подкласса Актера, но это кажется довольно громоздким для такой простой задачи.

Я слишком много думаю об этом? Просто кажется, что нет смысла вносить первоначальные изменения, если я просто делаю то же самое в другом месте.

7
задан flowsnake 29 April 2012 в 00:51
поделиться