zoukankan      html  css  js  c++  java
  • 面向对象思想设计_计算器小程序(设计模式入门篇_01)

    名称:简单计算器程序

    面向对象思想的由来:面向对象编程思想的由来是从面向过程演变而来,所以我们用一个简单的计算器程序用面向过程的方式去实现。

    以下是面向过程方式实现计算器程序:

    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

  • 相关阅读:
    LiLicense server OR Activation code
    一个比喻讲明Docker是什么
    Linux 系统目录结构说明
    Sublime Text2支持Vue语法高亮显示
    javascript权威指南笔记[6-8]
    javascript权威指南笔记[1-5]
    使用chrome控制台调试js代码
    windows与linux下执行.class(包含main方法)
    linux 命令
    几种常见的编码格式
  • 原文地址:https://www.cnblogs.com/android-deli/p/10322234.html
Copyright © 2011-2022 走看看