1. 程式人生 > >《大話設計模式》Java程式碼示例(一)之簡單工廠方法

《大話設計模式》Java程式碼示例(一)之簡單工廠方法

簡單工廠模式(Simple Factory):也叫靜態工廠模式,就是建立一個工廠類,對實現了同一介面的一些類進行例項的建立。

package simplefactory;

/**
 * 簡單工廠方法(Simple Factory)
 * 簡單運算工廠類
 */
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 OperationMul();
                break;
            case "/":
                operation = new OperationDiv();
                break;
            default:
                throw new RuntimeException("不支援運算!");
        }
        return operation;
    }

}
package simplefactory;

/**
 * 簡單工廠方法(Simple Factory)
 * Operation運算類
 */
public abstract class Operation {

    public double numberA = 0;
    public double numberB = 0;

    public abstract double getResult();

}

/**
 * 加法類
 */
class OperationAdd extends Operation {

    @Override
    public double getResult() {
        return numberA + numberB;
    }

}

/**
 * 減法類
 */
class OperationSub extends Operation {

    @Override
    public double getResult() {
        return numberA - numberB;
    }

}

/**
 * 乘法類
 */
class OperationMul extends Operation {

    @Override
    public double getResult() {
        return numberA * numberB;
    }

}

/**
 * 除法類
 */
class OperationDiv extends Operation {

    @Override
    public double getResult() {
        if (numberB == 0) {
            throw new RuntimeException("除數不能為0!");
        }
        return numberA / numberB;
    }

}
package simplefactory;

/**
 * 簡單工廠方法(Simple Factory)
 * 客戶端main方法
 */
public class Calculator {

    public static void main(String[] args) {
        Operation operation;
        operation = OperationFactory.createOperate("+");
        operation.numberA = 20;
        operation.numberB = 10;
        double result = operation.getResult();
        System.out.println(result);
    }

}