2016-03-31 3 views
0

Ich versuche, eine kleine Taschenrechneranwendung zu bilden und OOPS Konzepte zu erlernen. Ich sah this talk. Es zeigt, wie Polymorphie verwendet werden kann, um Switch-Anweisungen zu vermeiden.Erhalte die korrekte Kindklasseninstanz ohne Schalterfall

Ich habe 4 Bedientasten in meiner app (+, -, /, *). Ich verwende 2 Stacks für Operatoren und Operanden. Wenn der Benutzer auf einen beliebigen Tastenoperanden oder Operator tippt, versuche ich einen Infixbaum für den aktuellen Ausdruck zu erstellen und den Operator im Operator-Stack zu halten. Wenn der Benutzer auf "calculate" (Berechnen) klickt, gehe ich durch den Operator-Stack und passe den Infix-Baum basierend auf der Operator-Priorität an.

Ich habe abstrakte Node Klasse, ValueNode ->Node, abstrakte operatorNode, AddNode -> operatorNode, SubtractNode ->OperatorNode und so weiter.

Mein Code ist von folgendem Link inspiriert, falls die obige Beschreibung nicht klar ist.

Mein Problem ist, wie kann ich korrekte Kind-Klasse-Objekt basierend auf dem Operator char aus dem Stapel ohne Verwendung von Schalter erstellen?

So, da char (+ oder - oder * oder /) Wie erstelle ich AddNode oder SubtractNode ohne Schalter.

+2

Anstatt Ihren Code zu beschreiben, veröffentlichen Sie ihn. Es wird einfacher zu verstehen und Ihnen helfen. – Guy

Antwort

0

Sie können eine Karte vom Operator zu einer Factory erstellen, die die korrekte Instanz erstellt. Auf diese Weise können:
1. Vermeiden Sie ein Schalter
2. Vermeiden Sie es, den Baum Schöpfung zu aktualisieren, wenn Sie neue Operanden hinzufügen, so dass sie nur in der Karte registrieren

Was auch immer nicht in der Karte kann angenommen werden, eine sein Operand (Konstante oder Variable)

+0

gracias mein Freund. –

Verwandte Themen