成品展示:
方案:
- 采用状态机和静态工厂模式实现。
1.使用工厂方法模式来创建操作对象
定义了一个抽象的操作类TOperation,其中声明了Calculate方法用于执行具体的计算。
然后针对不同的操作(加、减、乘、除、取模)分别创建了具体的操作类,如TAddOperation、TSubOperation等,它们继承自TOperation并实现了Calculate方法。
最后定义了一个工厂类TOperationFactory,根据传入的操作符来创建对应的操作对象。
2.使用状态机来管理计算器的不同状态
定义了一个状态枚举类型TCalculatorState,包含输入第一个操作数、输入第二个操作数、显示结果三个状态。
在代码中使用CurrentState变量来记录当前的状态,并在NumberClick、OperatorClick等事件处理方法中根据当前状态来执行相应的操作并更新状态。
3.更多细节
代码中还考虑了一些细节情况的处理,比如:
连续按两次运算符时,以最后一次为准
除数为0时给出异常提示
支持输入负数
支持退格键删除输入