简单计算器的实现
2015-09-21 11:12
411 查看
简单计算器其实就是对于两个运算数的操作。那么,当程序从简单到复杂的过程中,容易出现这样的问题,运算可能有多种情况,当有新的运算要加入时,如何添加新的运算是程序的重点。比如,一个薪资系统,老板,经理,你的工资算法都是在一个类里,当需要添加一个实习生的工资时,如果在原类中进行修改,那么你的工资就喝老板的工资都成透明的了,不便于数据的保护。如何实现可扩展,可维护,可复用,灵活呢,就简单实用一下工厂模式。
程序写完了,如果你是想做计算机方面工作的,那么请你放弃吧,这里不是你的未来。
首先,命名问题,其次是程序的逻辑问题。
那么,如何让面向对象来满足计算器的方法呢?
准确的说,就是让业务和逻辑进行分离,可以说,这是所有编程的必备思想;
另外,一个优秀的程序员会分析代码的创建过程中,执行的效率问题。比如是否有不必要的编译和执行等。如何避免不必要的实例化问题;
简单工厂模式就是实现实例化的过程:我拥有很多简单的原材料,但是要加工成不同的玩具,还是根据我的工厂模具来定型;
1. 加法
2. 减法
3. 新增加乘法
实现过程:
1. 创建基础的操作类
因为java中本身的类中成员函数就是虚函数,因此,把getResult()当成虚函数来对待;
2. 创建加法的操作子类
3 . 创建减法的操作子类
4、 创建工厂
传递的参数为字符串,因为来自客户端的参数只能够为字符串的格式;
5、 创建客户端代码
6、 如何想增加一个运算操作应该怎么办呢?
创建一个新的子类:OperationMul
在工厂中加入新的操作指令:
那么就可以直接在客户端进行调用了。
继承和创建关系
1. 面试题:实现两个数的计算器
乍一看,很简单。顺序从头到脚,从输入到输出即可。public class Calculator{ private String A; private String B; A = input(); B = input(); private String C; C = inputOper(); if(C == '+'){ System.out.println(A+B); } if(C == '-'){ System.out.println(A+B); } if(C == '*'){ System.out.println(A+B); } if(C == '/'){ System.out.println(A+B); }
程序写完了,如果你是想做计算机方面工作的,那么请你放弃吧,这里不是你的未来。
首先,命名问题,其次是程序的逻辑问题。
2. 使用面向对象思想
面向对象就是为了满足程序的可维护,可扩展,和可复用的要求。一个很好的例子:活字印刷。只需要改字,便可以满足要求;并且,这些字还可以用在其他的文章中,便可以满足复用;如果要加字,只需要另外刻字,便可以满足扩展;那么,如何让面向对象来满足计算器的方法呢?
准确的说,就是让业务和逻辑进行分离,可以说,这是所有编程的必备思想;
另外,一个优秀的程序员会分析代码的创建过程中,执行的效率问题。比如是否有不必要的编译和执行等。如何避免不必要的实例化问题;
简单工厂模式就是实现实例化的过程:我拥有很多简单的原材料,但是要加工成不同的玩具,还是根据我的工厂模具来定型;
3. 代码实现
程序功能组成:1. 加法
2. 减法
3. 新增加乘法
实现过程:
1. 创建基础的操作类
// 两个操作数 package a2; public class Operation { private double _numberA = 0; private double _numberB = 0; protected double get_numberA() { return _numberA; } protected void set_numberA(double _numberA) { this._numberA = _numberA; } public double get_numberB() { return _numberB; } public void set_numberB(double _numberB) { this._numberB = _numberB; } // get the result; public double getResult(){ double result = 0; return result; } }
因为java中本身的类中成员函数就是虚函数,因此,把getResult()当成虚函数来对待;
2. 创建加法的操作子类
package a2; public class OperationAdd extends Operation{ // Java中其实没有虚函数的概念,它的普通函数就相当于C++的虚函数, // 动态绑定是Java的默认行为。 // 如果Java中不希望某个函数具有虚函数特性,可以加上final关键字变成非虚函数 @Override public double getResult(){ double result = get_numberA() + get_numberB(); return result; } }
3 . 创建减法的操作子类
package a2; public class OperationSub extends Operation{ @Override public double getResult(){ double result = get_numberA() - get_numberB(); return result; } }
4、 创建工厂
传递的参数为字符串,因为来自客户端的参数只能够为字符串的格式;
package a2; public class OperationFactory { public static Operation createOperation(String operateString){ Operation oper = null; // 防止不必要的实例化,使用工厂模式。 switch (operateString) { case "+": oper = new OperationAdd(); break; case "-": oper = new OperationSub(); break; default: break; } return oper; } }
5、 创建客户端代码
package a2; import java.util.Scanner; public class Calculator { public static void main(String[] args) { System.out.println("Please Type in two values:"); Scanner sc = new Scanner(System.in); double _numberA = sc.nextDouble(); double _numberB = sc.nextDouble(); System.out.println("Which operation you want to do?"); String operatorString = sc.next(); Operation oper = OperationFactory.createOperation(operatorString); oper.set_numberA(_numberA); oper.set_numberB(_numberB); double _result = oper.getResult(); System.out.println("Result is: " + _result); } }
6、 如何想增加一个运算操作应该怎么办呢?
创建一个新的子类:OperationMul
package a2; public class OperationMul extends Operation{ @Override public double getResult(){ double result = get_numberA() * get_numberB(); return result; } }
在工厂中加入新的操作指令:
case "*": oper = new OperationMul(); break;
那么就可以直接在客户端进行调用了。
4. 简单分析
继承和创建关系
相关文章推荐
- [Android Pro] fragment中嵌套viewpager,vierpager中有多个fragment,不显示
- asp.net后台导出excel的方法:使用response导出excel
- void (*f(int, void (*)(int)))(int) 函数解析 转
- first H5
- Unable to open ...\tools\capture\allegro.cfg for reading
- ASP中实现分页显示的七种方法
- 修改WampServer的默认端口
- html+css基础2(标签选择,分页,行和块元素)
- 【任务学习之一】
- 快速在Ubuntu下配置apache+php+mysql+phpmyadmin环境
- try catch finally,return组合使用
- 设计模式学习笔记-单例模式
- ListView的position的保持
- Linux初学——管理文件与目录(下)
- OSI网络模型以及TCP/IP模型(协议族)
- 国内能用的NTP服务器及和标准源的偏差值
- 母牛的故事
- 消逝的图腾
- Opencv2.4.9源码分析——SURF
- 设计模式学习笔记-工厂方法模式