Implementación anti-if del método de fábrica
Estoy aplicando el patrón de diseño Factory en mi proyecto C ++, y a continuación puedes ver cómo lo estoy haciendo. Intento mejorar mi código siguiendo la campaña "anti-if", por lo tanto, quiero eliminar las declaraciones if que tengo. ¿Alguna idea de cómo puedo hacerlo?
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;
}
Me imagino creando un mapa, con una cadena como clave, y el constructor (o algo para crear el objeto). Después de eso, puedo obtener el constructor del mapa usando el tipo (los tipos son cadenas) y crear mi objeto sin ningún tipo de if. (Sé que estoy siendo un poco paranoico, pero quiero saber si se puede hacer o no).