java设计模式实现计算机简单四则运算功能

关注重工黑大帅,学习不迷路

一、利用面向过程编程思想完成计算机简单四则运算功能

package practice;
import java.util.Scanner;

/**
 * @date 2020/2/27
 * @author 重工黑大帅
 * 实现功能:实现计算机简单四则运算
 */

public class Demo {

    public static void main(String[] args) {
        Operation o = new Operation();
        o.fun();
    }
}
class Operation{
    Scanner scanner = new Scanner(System.in);
    //做加法运算
    public  void add() {
        System.out.println("你选择的是加法");
        System.out.print("请输入第一个数:");
        int x = scanner.nextInt();
        System.out.print("请输入第二个数:");
        int y = scanner.nextInt();
        System.out.println("所求结果为:"+(x+y));
    }

    //	减法运算
    public  void sub() {
        System.out.println("你选择的是减法");
        System.out.print("请输入第一个数:");
        int x = scanner.nextInt();
        System.out.print("请输入第二个数:");
        int y = scanner.nextInt();
        System.out.println("所求结果为:"+(x-y));
    }

    //	乘法运算
    public  void mul() {
        System.out.println("你选择的是乘法");
        System.out.print("请输入第一个数:");
        int x = scanner.nextInt();
        System.out.print("请输入第二个数:");
        int y = scanner.nextInt();
        System.out.println("所求结果为:"+(x*y));
    }

    //	除法运算
    public  void div() {
        System.out.println("你选择的是除法");
        System.out.print("请输入第一个数:");
        int x = scanner.nextInt();
        System.out.print("请输入第二个数:");
        int y = scanner.nextInt();
        if (y == 0) {
            System.out.println("注:被除数不能为0,程序结束");
        } else {
            System.out.println("所求结果为:"+(x/y));
        }
    }
    public void fun() {
        System.out.println("请输入你的操作:1:加法,2:减法,3:乘法,4:除法");
        int choose = scanner.nextInt();
        switch (choose) {
            case 1: {
                add();
                break;
            }
            case 2: {
                sub();
                break;
            }
            case 3: {
                mul();
                break;
            }
            case 4: {
                div();
                break;
            }
            default:{
                System.out.println("输入错误,程序结束");
                break;
            }
        }
    }
}

结果显示:
java设计模式实现计算机简单四则运算功能_第1张图片
过程分析:可能很多朋友拿到这道题,就会以上面的实现方式编写代码,不知道我猜对了没有,哈哈哈。如果我想增加取余的功能,那是不是应该在类Operation中添加如下代码:


    //	取余运算
    public  void mod() {
        System.out.println("你选择的是取余法");
        System.out.print("请输入第一个数:");
        int x = scanner.nextInt();
        System.out.print("请输入第二个数:");
        int y = scanner.nextInt();
        System.out.println("所求结果为:"+(x%y));
    }

在switch代码块中添加如下代码:

case 5: {
      mod();
      break;
            }

那如果还想添加更多的功能,那是不是应该继续往其中写代码呢?那这样的话代码会越来越多,程序变得越来越冗杂,对于编程而言效果不是很理想。

二、面向对象编程思想隆重登场

在java面向对象编程中,学过抽象类、接口、线程等知识的你,是否会应用呢?
下面我们通过面向对象编程来实现上述功能:
这里我总共写了6个类,1个接口:java设计模式实现计算机简单四则运算功能_第2张图片
Calculate类(接口类,里面包含一个计算类型的方法):

package practice;

public interface Calculate {

    public int arithmatic(int x,int y);
}

CalculateAdd类(实现加法功能):

package practice;

public class CalculateAdd extends ImplementsCalculate {
    public int arithmatic(int a,int b){
        System.out.println("a+b="+(a+b));
        return a+b;
    }
}

CalculateSub类(实现减法功能):

package practice;
public class CalculateSub extends  ImplementsCalculate {
    public int arithmatic(int a,int b){
        System.out.println("a-b="+(a-b));
        return 0;
    }
}

CalculateMul类(实现乘法功能):

package practice;

public class CalculateMul extends ImplementsCalculate {
    public int arithmatic(int a,int b){
        System.out.println("a * b = "+(a*b));
        return a+b;
    }
}

CalculateDiv类(实现除法功能):

package practice;

public class CalculateDiv extends ImplementsCalculate {
    public int arithmatic(int a,int b){
        if (b == 0) {
            System.out.println("注:被除数不能为0,程序结束");
        } else {
            System.out.println("所求结果为:"+(a/b));
        }
        return a+b;
    }
}

Demo类(含有main方法的主类):



package practice;

import java.util.Scanner;

/**
 * @author 重工黑大帅
 * 实现功能:实现计算机简单五则运算
 * @date 2020/2/28
 */


public class Demo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入第一个数a:");
        int x = scanner.nextInt();
        System.out.print("请输入第二个数b:");
        int y = scanner.nextInt();
        ImplementsCalculate a = new CalculateAdd();//根据功能需要,这儿可以进行更改
        a.arithmatic(x,y);
    }
}

ImplementsCalculate类(实现Calculate接口类):

package practice;

public class ImplementsCalculate implements Calculate{
    public int arithmatic(int a,int b){
        return 0;
    }
}

结果显示:
java设计模式实现计算机简单四则运算功能_第3张图片
那如果我们想拓展其他功能的话,比如进行取余运算,我们应该如下操作:
在包中添加类CalculateMod,写入以下代码:
java设计模式实现计算机简单四则运算功能_第4张图片

package practice;
public class CalculateMod extends ImplementsCalculate{
    public int arithmatic(int a,int b){
        System.out.println("a % b = "+(a%b));
        return 0;
    }
}

三、总结:

经过上面的两种方式实现计算机简单四则运算对比,大家有没有发现使用面向对象编程代码量没有第一个方法多,而且我们在进行功能拓展时只需要增加需要的功能类,然后更改名字就可以得出我们想要的答案.第一种方法还要去类的本体中进行修改,带来一定的麻烦。本题第二种方法采用了抽象的概念:一个稳定的抽象层,加一个可以随意扩展的实现层,意思就是定义接口,通过一个类去实现这个接口,然后各个功能区继承上面实现接口的类,这种方法是不是更简单呢?抓紧时间,自己去试试吧!

拓展题目:利用单一职责求100以内的奇数和偶数

这里顺便附上7大面向对象设计原则(原则意思纯属个人理解):

  1. 单一职责:要求在软件系统中一个对象只包含单一的职责,并且该职责被完整地封装在一个类中
  2. 开闭原则:对扩展开放、对修改关闭
  3. 迪米特原则:相当于项目经理来做的事情(要求每一个软件单位对其它单位都只有最少的知识)
  4. 接口隔离原则:要求客户端不应该依赖那些它不需要的接口
  5. 合成复用原则:要求优先使用对象组合,而不是通过继承来达到复用的目的
  6. 里氏替换原则:在软件中所有引用基类的地方必须能透明地使用其子类的对象
  7. 依赖倒转原则:依赖抽象

关注重工黑大帅,学习不迷路

你可能感兴趣的:(Java)