Factory-Methode Anti-If-Implementierung

Ich wende das Factory-Entwurfsmuster in meinem C ++ - Projekt an und unten sehen Sie, wie ich es mache. Ich versuche, meinen Code zu verbessern, indem ich der "Anti-If" -Kampagne folge. Daher möchte ich die if-Anweisungen entfernen, die ich habe. Irgendeine Idee, wie ich das machen kann?

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;
}

Ich könnte mir vorstellen, eine Map mit einem String als Schlüssel und dem Konstruktor (oder etwas zum Erstellen des Objekts) zu erstellen. Danach kann ich den Konstruktor mithilfe des Typs (Typ sind Zeichenfolgen) aus der Map abrufen und mein Objekt ohne if erstellen. (Ich weiß, dass ich ein bisschen paranoid bin, aber ich möchte wissen, ob es geht oder nicht.)

Antworten auf die Frage(16)

Ihre Antwort auf die Frage