名称:简单计算器程序
面向对象思想的由来:面向对象编程思想的由来是从面向过程演变而来,所以我们用一个简单的计算器程序用面向过程的方式去实现。
以下是面向过程方式实现计算器程序:
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("input 1 figure...");
double figure1 = Double.parseDouble(scanner.nextLine());
System.out.println("input operator...");
String operator = scanner.nextLine();
System.out.println("input 2 figure...");
double figure2 = Double.parseDouble(scanner.nextLine());
double resultOperator = 0.0;
if ("+".equals(operator)) {
resultOperator = figure1 + figure2;
} else if ("-".equals(operator)) {
resultOperator = figure1 - figure2;
} else if ("*".equals(operator)) {
resultOperator = figure1 * figure2;
} else if ("/".equals(operator)) {
resultOperator = figure1 / figure2;
}
System.out.println("result:" + resultOperator);
}
}
运行效果:
这实现起来确实很快,代码运行起来也没有异常,但是并不是代码无错就是优,我们要多方面考虑就知道问题的所在了,例如:以后要在平板电脑上计算,以后要在javaWeb程序上计算,能到这个计算过程都要在去写一遍?,这肯定没有体现出复用性
所以我们要考虑如何复用?
业务封装:
package com.dahua.demo1.b;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("input 1 figure...");
double figure1 = Double.parseDouble(scanner.nextLine());
System.out.println("input operator...");
String operator = scanner.nextLine();
System.out.println("input 2 figure...");
double figure2 = Double.parseDouble(scanner.nextLine());
double operatorResult = Operator.getOperatorResult(figure1, figure2, operator);
System.out.println("result:" + operatorResult);
}
}
package com.dahua.demo1.b;
public class Operator {
/**
* 此方法的用于计算两个数的值
* @param figure1 第一个数值
* @param figure2 第二个数值
* @param operator 传入运算符
* @return
*/
public static double getOperatorResult(double figure1, double figure2, String operator) {
double resultOperator = 0.0;
if ("+".equals(operator)) {
resultOperator = figure1 + figure2;
} else if ("-".equals(operator)) {
resultOperator = figure1 - figure2;
} else if ("*".equals(operator)) {
resultOperator = figure1 * figure2;
} else if ("/".equals(operator)) {
resultOperator = figure1 / figure2;
}
return resultOperator;
}
}
所以我们定义一个计算类(Operator),里面有一个计算的方法,以后不管是平板电脑程序需要计算,还是JavaWeb程序需要计算 等等,都可以使用这个Operator类的计算方法了,从而实现了复用,面向对象特征之一封装。
我们在以面向对象编程思想里考虑,这样写耦合度太高,扩展性也不好,因为如果现在要增加一个平方根运算呢,难道要去修改代码吗?
所以我们以面向对象的思想来考虑的话,抽取共用相同的行为,无论(加 减 乘 除)他们都用算法的行为,所以我们定义一个父类,用子类来实现:
public abstract class Counter {
private double figure1;
private double figure2;
public double getFigure1() {
return figure1;
}
public void setFigure1(double figure1) {
this.figure1 = figure1;
}
public double getFigure2() {
return figure2;
}
public void setFigure2(double figure2) {
this.figure2 = figure2;
}
/**
* 抽象方法
* 计算两个数值
* @return 返回计算结果
*/
public abstract double counterResult();
}
// 加法类
public class CounterAdd extends Counter{
public double counterResult() {
return Operator.getOperatorResult(getFigure1(), getFigure2(), "+");
}
}
// 减法类
public class CounterMinus extends Counter {
public double counterResult() {
return Operator.getOperatorResult(getFigure1(), getFigure2(), "-");
}
}
// 乘法类
public class CounterRide extends Counter {
public double counterResult() {
return Operator.getOperatorResult(getFigure1(), getFigure2(), "*");
}
}
// 除法类
public class CounterRemove extends Counter {
public double counterResult() {
return Operator.getOperatorResult(getFigure1(), getFigure2(), "/");
}
}
// 计算类
public class Operator {
/**
* 此方法的用于计算两个数的值
* @param figure1 第一个数值
* @param figure2 第二个数值
* @param operator 传入运算符
* @return
*/
public static double getOperatorResult(double figure1, double figure2, String operator) {
double resultOperator = 0.0;
if ("+".equals(operator)) {
resultOperator = figure1 + figure2;
} else if ("-".equals(operator)) {
resultOperator = figure1 - figure2;
} else if ("*".equals(operator)) {
resultOperator = figure1 * figure2;
} else if ("/".equals(operator)) {
resultOperator = figure1 / figure2;
}
return resultOperator;
}
}
客户端程序调用:
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("input 1 figure...");
double figure1 = Double.parseDouble(scanner.nextLine());
System.out.println("input operator...");
String operator = scanner.nextLine();
System.out.println("input 2 figure...");
double figure2 = Double.parseDouble(scanner.nextLine());
Counter counter = CounterFactory.getInstance().getOperator(operator);
counter.setFigure1(figure1);
counter.setFigure2(figure2);
double counterResult = counter.counterResult();
System.out.println("result:" + counterResult);
}
}
执行结果:
以上说这些:完全是模拟从一个简单的计算器程序,用常规面向过程思想实现,慢慢的演化到面向对象思想中来体现,以上还有很多不足,没有去完善,主要是体现出面向对象程序设计一种方式。
谢谢大家的观看,更多精彩技术博客,会不断的更新,请大家访问,
刘德利CSDN博客, http://blog.csdn.net/u011967006