設計模式之簡單工廠模式(整理筆記)
面向物件和麵向過程的區別:活字印刷術和 印刷術的區別。(借用大神的比喻,感覺很貼切,而且想像步到更好的了)
借用面試所寫的的 一個程式:輸入個位數的減減乘除,輸出結果。
初學者和大部分開發者所犯下錯誤:命名不規範(請使用駝峰式),程式碼邏輯不夠嚴謹(缺少對非 常規方式的考慮)還有最重要的是隻針對當前功能所寫出的程式碼(面向過程),程式碼質量不夠高,不易複用,維護和擴充套件等。如果我們只是為了完成功能而去寫一個程式碼的時候,勢必也就丟失了我們所使用的語言的最大的一個優勢:面向物件。---我們通過封裝,繼承和多太。讓其業務邏輯和介面邏輯分隔開,使他們的耦合度下降,從而達到複用,易維護,易擴充套件的效果。下面展示幾種程式碼(前面的兩種只有思路)
面向過程的程式碼---為加工的程式碼(已將所有的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() { returnnumberB; } 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(); }
總結:
簡單工廠模式是面向物件(封裝,繼承和多臺的)的一種初步應用,這種模式其實乍一看每個人都可以看懂。但是它也需要我們花費一定的時間是整理,去消化,去思考。
剩下的就在程式碼中去慢慢的體會吧。