Я применяю шаблон проектирования 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;
}
Я бы представил создание карты со строкой в качестве ключа и конструктором (или чем-то еще для создания объекта). После этого я могу просто получить конструктор с карты, используя тип (тип - это строки), и создать свой объект без какого-либо if. (Я знаю, что немного параноик, но хочу знать, можно ли это сделать или нет.)
Factory Method
. - person Petar Minchev   schedule 17.08.2010