(一)类设计:
1.运算符枚举
enum CalTypeWithTwoUnit
Add Sub Multi Div 5512915179
enum CalTypeWithOneUnit
Twice(平方) Sqrt(开放) DaoShu(倒数) Opp(相反数)
2.各个子类
继承于父类CalActionBase
这个父类中是所有子运算符进行运算都需要有的操作
Validate 验证操作数的合法性
Action 转换操作类型之后进行计算
Calculate抽象方法 在各个子类中实现
3.接口ICalculator
方法:PushNum PushCal BackAWord(退格) Reset(重置)
ClearOneOppend(清除当前操作数)
属性:Result 只读格式只有一个get方法 供外界调用
4.接口的实现类Calculator
继承接口ICalculator
因为要具体计算所以必须有一个CalActionBase的引用 _action
_action可以调用Calculate方法而 在CalActionBase中是抽象方法
所以_action实例化不同子类对象实例便可调用子类中对Calculate抽象方法的实现体 ——多态@@@@@@
(二)业务逻辑:
1.Form1中调用:
定义一个接口_ical _ical = new Calculator(); 则,_ical可以调用接口的所有方法和属性
2.再次分析一下上面各个类的作用,不难发现
各个运算子类只是一个具体计算行为的操作
而作为基类的CalActionBase只是各个子运算的一个统筹 只能包含一些具体运算中的公操作
接口中自然也没有方法体的实现
那么,主体的运算逻辑自然会在Calculator中了
3.分析Calculator中应该有什么属性和字段
(1)一个CalActionBase类的引用_action。这个必须有,原因不再赘述
(2)一个整体运算表达式的字符串string _strExp
设置一个get方法 供外部调用 用于显示全部输入
同时用于Clear操作(C)
(3)一个操作数字符串 string _strNum
用于ClearOneOppend操作(CE)和BackAWord(退格)操作
设置一个get方法 供外部调用 用于显示当前输入