1. 程式人生 > >大話設計模式之簡單工廠模式---------計算器

大話設計模式之簡單工廠模式---------計算器

Operation類 計算的父類 提供輸入的計算引數和獲取結果的方法,用於被子類具體計算方法繼承
package com.dahua.caculator;

/**
 * Created by walle
 * 2017/10/11.14:46
 * good good study!
 */
public class Operation {
    private double numberA;
    private double numberB;

    public double getNumberA() {
        return numberA;
    }

    public void 
setNumberA(double numberA) { this.numberA = numberA; } public double getNumberB() { return numberB; } public void setNumberB(double numberB) { this.numberB = numberB; } public double getResult() { double result = 0; return result; } }
子類加法計算類
package com.dahua.caculator;

/**
 * Created by walle
 * 2017/10/11.14:50
 * good good study!
 */
public class OperationAdd extends Operation {
    @Override
public double getResult() {
        double result = 0;
        result = getNumberA()+getNumberB();
        return result;
    }
}
子類除法計算類
/**
 * Created by walle
* 2017/10/11.15:26 * good good study! */ public class OperationDiv extends Operation { @Override public double getResult() { double result =0; if(getNumberB()==0){ throw new RuntimeException("除數不能為0"); } result = getNumberA()/getNumberB(); return result; } }
其他計算類自己寫吧工廠類 根據提供的運算子決定呼叫哪個計算類
package com.dahua.caculator;

/**
 * Created by walle
 * 2017/10/11.14:52
 * good good study!
 */
public class OperationFactory {
    public static Operation createOperate(String operate) {
        Operation operation = null;
        switch (operate) {
            case "+":
                operation = new OperationAdd();
                break;
            case "-":
                operation = new OperationSub();
                break;
            case "/":
                operation = new OperationDiv();
                break;
        }
        return operation;
    }
}

執行計算的方法
importjava.util.Scanner;

/**
 * Created by walle
 * 2017/10/11.15:00
 * good good study!
 */
public class Caculator {
    public static void main(String[] args) {
        Operation operation;
        Scanner scanner = new Scanner(System.in);
        String operate = scanner.next();
        System.out.println("您輸入的運算子是:"+operate);
        operation = OperationFactory.createOperate(operate);
        Double numberA = scanner.nextDouble();
        System.out.println("您輸入的第一個數字是:"+numberA);
        Double numberB = scanner.nextDouble();
        System.out.println("您輸入的第二個數字是:"+numberB);
        operation.setNumberA(numberA);
        operation.setNumberB(numberB);
        double result = operation.getResult();
        System.out.println("輸出結果是:"+result);
    }
}
如果後續需要其他的運算方法只需要寫一個運算類繼承Operation類,並且在工廠類中加入switch分支就行了。