面向对象思想设计_计算器小程序(设计模式入门篇_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
原创粉丝点击