面向对象思想设计_计算器小程序(设计模式入门篇_01)
来源:互联网 发布:我的世界瞳术js视频 编辑:程序博客网 时间:2024/05/17 06:11
名称:简单计算器程序
面向对象思想的由来:面向对象编程思想的由来是从面向过程演变而来,所以我们用一个简单的计算器程序用面向过程的方式去实现。
以下是面向过程方式实现计算器程序:
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
1 0
- 面向对象思想设计_计算器小程序(设计模式入门篇_01)
- java设计模式之面向对象思想
- 以面向对象的思想设计的计算器 代码
- 面向对象设计思想
- 面向对象设计思想
- 面向对象思想设计
- 面向对象设计思想
- 面向对象设计思想
- 面向对象设计思想
- Unity_设计模式_简介_01
- JavaSE---多线程、面向对象设计思想、设计模式
- 面向对象设计思想与常见设计模式小结
- 面向对象思想设计原则及常见设计模式
- 黑马程序员_面向对象思想分析与设计
- 【小话设计模式】面向对象基础
- 设计模式_面向对象设计原则简述
- 设计模式_面向对象的常见设计原则概述
- 面向对象设计思想(一)
- 遗传算法学习
- Accept-Charset,Accept-Encoding,pageEncoding,charset区别与联系
- WebView学习总结-基础篇
- (100% OK)(OK) 在VirtualBox中运行 cm-13-kiwi (华为 荣耀 5X) - 移植cm-13-kiwi - 成功
- 第一个值出现一次的字符
- 面向对象思想设计_计算器小程序(设计模式入门篇_01)
- 周期性循环执行一段代码的实现
- 微信企业号,文本信息发送
- 定位获取地址coffee语法
- Win7,64位下安装Python3.5.2
- unity 四元数一些理解
- XML之基础
- studio添加Eclipse的依赖包
- Android逆向之旅---静态分析技术来破解Apk