Фабричный метод анти-если реализация

Я применяю шаблон проектирования Factory в своем проекте C ++, и ниже вы можете увидеть, как я это делаю. Я пытаюсь улучшить свой код, следуя кампании «анти-if», поэтому хочу удалить утверждения if, которые у меня есть. Есть идеи, как мне это сделать?

typedef std::map<std::string, Chip*> ChipList;

Chip* ChipFactory::createChip(const std::string& type) {
    MCList::iterator existing = Chips.find(type);
    if (existing != Chips.end()) {
        return (existing->second);
    }
    if (type == "R500") {
        return Chips[type] = new ChipR500();
    }
    if (type == "PIC32F42") {
        return Chips[type] = new ChipPIC32F42();
    }
    if (type == "34HC22") {
        return Chips[type] = new Chip34HC22();
    }
    return 0;
}

Я хотел бы представить создание карты со строкой в ​​качестве ключа и конструктор (или что-то для создания объекта). После этого я могу просто получить конструктор из карты, используя тип (type is strings) и создать свой объект без каких-либо if. (Я знаю, что я немного параноик, но я хочу знать, можно ли это сделать или нет.)

Ответы на вопрос(8)

Ваш ответ на вопрос