Implementação anti-if do método de fábrica
Estou aplicando o padrão de design Factory no meu projeto C ++, e abaixo você pode ver como estou fazendo isso. Eu tento melhorar meu código seguindo a campanha "anti-if", assim, desejo remover as instruções if que estou tendo. Alguma idéia de como posso fazer isso?
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;
}
Eu imaginaria criar um mapa, com string como chave e o construtor (ou algo para criar o objeto). Depois disso, posso obter o construtor do mapa usando o tipo (type são strings) e criar meu objeto sem if. (Eu sei que estou sendo um pouco paranóico, mas quero saber se isso pode ser feito ou não.)