1 枚举(策略方法)
package com.draymond.mp.code.controller;
import java.math.BigDecimal;
import java.util.function.DoubleBinaryOperator;
/**
* @Auther: ZhangSuchao
* @Date: 2020/8/10 21:21
*/
public enum Operator {
PLUS("+", (x, y) -> x + y),
MINUS("-", (x, y) -> subtract(x, y)), // 减法
TIMES("*", (x, y) -> x * y),
DIVIDE("/", (x, y) -> x / y);
private final String symbol;
private final DoubleBinaryOperator op;
Operator(String symbol, DoubleBinaryOperator op) {
this.symbol = symbol;
this.op = op;
}
@Override
public String toString() {
return symbol;
}
public double apply(double x, double y) {
return op.applyAsDouble(x, y);
}
/**
* 减法
*
* @param x
* @param y
* @return
*/
private static double subtract(double x, double y) {
BigDecimal bigDecimalX = new BigDecimal(Double.toString(x));
BigDecimal bigDecimalY = new BigDecimal(Double.toString(x));
return bigDecimalX.subtract(bigDecimalY).doubleValue();
}
}
-
PLUS、MINUS、TIMES、DIVIDE 是不同的策略方法
-
MINUS("-", (x, y) -> subtract(x, y)), // 减法。。。如果实现的策略比较长,也可以抽离出逻辑单元,保证代码的易阅读、可维护(也可以抽离到Utils种)
2 调用方式
public static void main(String[] args) {
double apply = Operator.MINUS.apply(2.3, 1.1);
System.out.println(apply); // 1.2
System.out.println(2.3 - 1.1); // 1.1999999999999997
}
附
double类型的 + - * / 操作会有问题,,比如"2.3-1.1= 1.1999999999999997";;
应该使用 BigDecimal 的方式,且需要" Double.toString(y)",转换一下