目标:实现一个计算器(利用封装,继承,多态的思想实现一个扩展性强的计算器)
工厂类:
-
public class OperatorFactory { Operator operator; public Operator getOperator(String type) { switch (type) { case "+": operator = new OperateAdd(); break; case "-": operator = new OperateSub(); break; case "*": operator = new OperateMul(); break; case "/": operator = new OperateDiv(); default: break; } return operator; } }
运算类:
-
具体实现类(运算方法 + - * /)abstract class Operator { public abstract double operate(double num1,double num2) throws Exception; }
-
加法 public class OperateAdd extends Operator{ @Override public double operate(double num1, double num2) { return num1 + num2; } }
-
减法 public class OperateSub extends Operator{ @Override public double operate(double num1, double num2) { return num1 - num2; } }
- 乘法
public class OperateMul extends Operator{ @Override public double operate(double num1, double num2) { return num1 * num2; } }
-
除法 public class OperateDiv extends Operator { @Override public double operate(double num1, double num2) throws Exception { if (num2 == 0) { throw new Exception("被除数不能为0!"); } return 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; Operator operator = new OperatorFactory().getOperator(oper); try{ result = operator.operate(numOne,numTwo); }catch (Exception e){ e.printStackTrace(); } System.out.println(result); } }