策略枚举实现简易计算器(加减乘除)
枚举类(Calculator类)
package com.zxg.design_pattern.strategy.demo3;
import java.text.DecimalFormat;
/**
* 策略枚举实现简易计算器(加减乘除)
*/
public enum Calculator {
//加法运算
ADD("+") {
public Float exec(float a, float b) {
return a + b;
}
},
//减法运算
SUB("-") {
public Float exec(float a, float b) {
return a - b;
}
},
//乘法运算
MUL("*") {
public String exec(float a, float b) {
DecimalFormat df = new DecimalFormat("0.00000"); //保留五位小数
return df.format((float) a * b);
}
},
//除法运算
DIV("/") {
public String exec(float a, float b) {
if (b != 0) {
DecimalFormat df = new DecimalFormat("0.00000"); //保留五位小数
return df.format((float) a / b);
} else {
return "除数不能为0,请重新输入";
}
}
};
//声明一个抽象函数
public abstract Object exec(float a, float b);
private final String value;
Calculator(String value) {
this.value = value;
}
//获得枚举成员的值
public String getValue() {
return this.value;
}
public static Object operate(String symbol, float a, float b) {
Calculator[] calculators = values();
for (Calculator calculator : calculators) {
if (calculator.getValue().equals(symbol)) {
return calculator.exec(a, b);
}
}
return 0;
}
}
测试类(Client3类)
package com.zxg.design_pattern.strategy.demo3;
import java.util.Arrays;
import java.util.Scanner;
/**
* @ClassName Client3
* @Description TOD0
* author axx
* Date 2021/12/6 15:14
* Version 1.0
**/
public class Client3 {
public static void main(String[] args) {
String[] s = new String[3]; //字符串数组
System.out.println("请输入第一个数字:\n");
Scanner sc1 = new Scanner(System.in); //接收用户从键盘输入的字符串
String str1 = sc1.next();
s[0] = str1; //输入的字符串str赋值给字符串数组的第一个
System.out.println("请输入运算符号:\n");
Scanner sc2 = new Scanner(System.in); //接收用户从键盘输入的字符串
String str2 = sc2.next();
s[1] = str2;//输入的字符串str赋值给字符串数组的第二个
System.out.println("请输入第二个数字:\n");
Scanner sc3 = new Scanner(System.in); //接收用户从键盘输入的字符串
String str3 = sc3.next();
s[2] = str3;//输入的字符串str赋值给字符串数组的第三个
//输入的两个参数是数字
float a = Float.parseFloat(s[0]);
//运算符号
String symbol = s[1];
float b = Float.parseFloat(s[2]);
System.out.println("输入的参数为:" + Arrays.toString(s));
System.out.println("运行结果为:" + a + symbol + b + "=" + Calculator.operate(symbol, a, b));
}
}
运行结果(仅测试了乘法、除法以及除法为0的情况):
PS:本demo仅仅只是使用策略枚举实现的一个特别简单的计算器,具体细节不与探讨和实现。