定义算法家族
abstract class OperateStrategy { public abstract double operate(double num1,double num2) throws Exception; }
加法
public class OperateAdd extends OperateStrategy { @Override public double operate(double num1, double num2) { return num1 + num2; } }
减法
public class OperateSub extends OperateStrategy { @Override public double operate(double num1, double num2) { return num1 - num2; } }
乘法
public class OperateMul extends OperateStrategy { @Override public double operate(double num1, double num2) { return num1 * num2; } }
除法
public class OperateDiv extends OperateStrategy { @Override public double operate(double num1, double num2) throws Exception { if (num2 == 0) { throw new Exception("被除数不能为0!"); } return num1 / num2; } }
判断使用哪个算法
public class OperatorContextStrategy { OperateStrategy operateStrategy = null; public OperatorContextStrategy(String type) { switch (type) { case "+": operateStrategy = new OperateAdd(); break; case "-": operateStrategy = new OperateSub(); break; case "*": operateStrategy = new OperateMul(); break; case "/": operateStrategy = new OperateDiv(); default: break; } } public double getResult(double num1, double num2) throws Exception{ return operateStrategy.operate(num1, num2); } }
测试类:
public class Test { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入第一个数值:"); double numOne = Integer.parseInt(scanner.nextLine()); System.out.println("请输入第二个数值:"); double numTwo = Integer.parseInt(scanner.nextLine()); System.out.println("请输入操作符(+、-、*、/):"); String oper = scanner.nextLine(); double result = 0; OperatorContextStrategy operator = new OperatorContextStrategy(oper); try { result = operator.getResult(numOne, numTwo); } catch (Exception e) { e.printStackTrace(); } System.out.println(result); } }