Оператор гигантского переключателя для конструкторов

У меня есть контейнер, который содержит кучу указателей на базовый класс, и функцию, которая принимает некоторые входные данные и возвращает класс, который является подклассом базового класса. Какой подкласс он возвращает, зависит от ввода.

Прямо сейчас у меня есть гигантский оператор switch, подобный этому:

class Base { ... }

class A : public Base { ... }
class B : public Base { ... }
...
class Z : public Base { ... }

Base* depends(int input) {
    switch (input) {
    case 1:
        return new A(...);
    case 2:
        return new B(...);
    ...
    case 26:
        return new Z(...);
    default:
        ...
    }
}

Мне было интересно, есть ли лучший способ разработать это. Я не знаю многих «шаблонов проектирования» (я думаю, так они называются), поэтому я не знаю, есть ли (очевидный) лучший способ их разработать.

5
задан Seth Carnegie 16 July 2011 в 05:41
поделиться