获取正确的子类实​​例无切换案例

时间:2016-03-31 07:05:26

标签: java oop optimization switch-statement polymorphism

我正在尝试制作一个小型计算器应用程序并学习OOPS概念。我看了this talk。 它显示了如何使用多态来避免switch语句。

我的应用中有4个操作员按钮(+-/*)。我使用2个堆栈作为运算符和操作数 当用户点击任何按钮操作数或操作符时,我尝试为当前表达式创建中缀树并将操作符保持在操作符堆栈中。 当用户点击"计算"我浏览运算符堆栈并根据运算符优先级调整中缀树。

我有抽象Node类,ValueNode - > Node,抽象operatorNode,AddNode - > operatorNode,SubtractNode - > OperatorNode等等。

如果上述说明不明确,我的代码的灵感来自以下链接。 http://cplusplus.kurttest.com/notes/stack.html#binary-expression-tree

我的问题是,如何在不使用switch的情况下根据堆栈中的operator char创建正确的子类对象?

因此,给定char(+-*/)如何在不使用switch的情况下创建AddNodeSubtractNode

1 个答案:

答案 0 :(得分:0)

您可以创建从操作员到工厂的地图,以创建正确的实例。这样你:
1.避免开关
2.避免在添加新操作数时更新树创建,只需在地图中注册它们

可以假设地图中没有的东西是操作数(常数或变量)