1. 程式人生 > >設計模式之簡單工廠模式(整理筆記)

設計模式之簡單工廠模式(整理筆記)

面向物件和麵向過程的區別:活字印刷術和 印刷術的區別。(借用大神的比喻,感覺很貼切,而且想像步到更好的了)

借用面試所寫的的 一個程式:輸入個位數的減減乘除,輸出結果

初學者和大部分開發者所犯下錯誤:命名不規範(請使用駝峰式),程式碼邏輯不夠嚴謹(缺少對非 常規方式的考慮)還有最重要的是隻針對當前功能所寫出的程式碼(面向過程),程式碼質量不夠高,不易複用,維護和擴充套件等。如果我們只是為了完成功能而去寫一個程式碼的時候,勢必也就丟失了我們所使用的語言的最大的一個優勢:面向物件。---我們通過封裝,繼承和多太。讓其業務邏輯和介面邏輯分隔開,使他們的耦合度下降,從而達到複用,易維護,易擴充套件的效果。下面展示幾種程式碼(前面的兩種只有思路)

面向過程的程式碼---為加工的程式碼(已將所有的BUG改掉):

分為了四步

(1)讓使用者輸入第一個數字。

(2)輸入另一個數字

(3)輸入+,-,*,/,並計算(除法判斷第二個數字為非空)

(4)輸出結果

很明顯這是一個面向過程的程式碼,不解釋,誰都能輕易的看懂。

面向物件的程式碼---第二次的程式碼(進行封裝的程式碼):

(1)儲存使用者輸入的第一個數字,第二個數字和運算子

(2)設定了一個運算類:裡面加減乘除四個方法,每個方法都是三個引數(第一個數字,第二個數字,運算子)

(3)然後輸出

這樣子確實是將業務和顯示分隔開了,但是,如果現在要加入一個開根號的運算,在正常的開發中就必須要給你整個的運算類。這樣子會增加不必要的風險(如果你改變了其他的正常執行的程式碼),所以就必須將其業務邏輯進一步的分開,使其相互步產生影響。

這就用到了一種模式(簡單工廠模式):

(1)建立一個實體類Operation:

public abstract 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 abstract double getResult(); }

(2)加減乘除類繼承Operation類:

加法:

public class OperationAdd extends Operation{
    @Override
public double getResult() {
        return getNumberA()+getNumberB();
}
}
減法:
public class OperationSub extends  Operation{
    @Override
public double getResult() {
        return getNumberA()-getNumberB();
}
}
乘法:
public class OperationMul extends Operation {
    @Override
public double getResult() {
        return getNumberA()*getNumberB();
}
}
除法:
public class OperationDiv extends  Operation {
    @Override
public double getResult() throws Exception {
        //判斷如果除數為0,則 丟擲異常
if (getNumberB()==0)throw  new Exception("除數不能為0");
        return getNumberA()/getNumberB();
}
}

(3)建立簡單工廠類:

public class OperationFactory {
    /**
     * 根據運算子來建立具體需要運算類
     */
public static Operation creatOperation(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;
}
        return  operation;
}
}

(4)呼叫:

public double useAdd() throws Exception {
    Operation operation;
operation=OperationFactory.creatOperation("+");
operation.setNumberA(20);
operation.setNumberB(100);
   return operation.getResult();
}

總結:

 簡單工廠模式是面向物件(封裝,繼承和多臺的)的一種初步應用,這種模式其實乍一看每個人都可以看懂。但是它也需要我們花費一定的時間是整理,去消化,去思考。

剩下的就在程式碼中去慢慢的體會吧。