一、面向过程的方法
采用传统的面向过程方法,实现一个简单的计算器——加减乘除的功能,只需要按照顺序,一步一步实现即可
其中除以0的情况未处理!
public class MainClass { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("-------计算器--------"); System.out.println("-------输入第一个数--------"); String num1 = scanner.nextLine(); System.out.println("-------输入操作符--------"); String oper = scanner.nextLine(); System.out.println("-------输入第二个数--------"); String num2 = scanner.nextLine(); double oper1 = Double.valueOf(num1); double oper2 = Double.valueOf(num2); if(oper.equals("+")){ System.out.println(oper1 + oper2); }else if(oper.equals("-")){ System.out.println(oper1 - oper2); }else if(oper.equals("*")){ System.out.println(oper1 * oper2); }else if(oper.equals("/")){ System.out.println(oper1 / oper2); } } }
二、面向对象的方法
对于上述实现过程,每次操作都需要进行判断,然后给出结果。
对此可以进行处理,创建一个抽象类Operation,包含具体运算操作数;封装不同操作的类继承Operation,进行专门的运算,以加法给出示例。
public abstract class Operation { private double num1; private double num2; public double getNum1() { return num1; } public void setNum1(double num1) { this.num1 = num1; } public double getNum2() { return num2; } public void setNum2(double num2) { this.num2 = num2; } public abstract double getResult(); }
public class AddOperation extends Operation{ @Override public double getResult() { return this.getNum1() +this.getNum2(); } }
那么,当需要进行加法操作时,只需要实例化一个加法运算器,set相应的操作数,然后获得结果
Operation addOperation = new AddOperation(); addOperation.setNum1(oper1); addOperation.setNum2(oper2); double result = addOperation.getResult(); System.out.println(result);
但是这有一个明显的缺陷,就是当进行不同运算时,需要实例化不同的对象,对此可以用工厂模式的方法来优化
三、工厂模式方法
创建一个核心工厂类
public interface OperationFactory { public Operation getOperation(); }
创建一个乘法的具体工厂
public class MutiplyOperationFactory implements OperationFactory { @Override public Operation getOperation() { return new MultiplyOperation(); } }
操作实现main中:
Scanner scanner = new Scanner(System.in); System.out.println("-------计算器--------"); System.out.println("-------输入第一个数--------"); String num1 = scanner.nextLine(); /* System.out.println("-------输入操作符--------"); String oper = scanner.nextLine();*/ System.out.println("-------输入第二个数--------"); String num2 = scanner.nextLine(); double oper1 = Double.valueOf(num1); double oper2 = Double.valueOf(num2); OperationFactory operationFactory = new MutiplyOperationFactory(); Operation mulOperation = operationFactory.getOperation(); mulOperation.setNum1(oper1); mulOperation.setNum2(oper2); System.out.println(mulOperation.getResult());
注:其他的乘法类自己实现,同加法类似