設計模式從零開始——簡單工廠模式
阿新 • • 發佈:2019-01-12
程式碼無措就是優?
這個顯然不對。程式碼擴充套件性強,耦合度低、複用度高和程式碼能完整實現業務功能同樣重要。
面向物件的程式設計思想指出,好的程式碼應該是把業務拆分成一個一個獨立的模組,模組之間通過某種關係組裝到一起就能實現特定的功能。
後期修改或者增加需求的時候,也只需要修改特定模組的內容,不會對整體的程式碼結構造成影響。
筆者也是java開發的菜鳥一枚,以往大多數編寫的程式碼都缺少面向物件的思想,現在工作中逐漸體現出各種弊端,例如程式碼難以維護,
實現功能程式碼量過多、程式碼邏輯複雜可讀性低等等,故現在決定研究設計模式相關知識,把開發工作從本質思想上進行改善。
第一節要學習的設計模式是【簡單工廠模式】,本質上這種模式就是把業務進行拆分,可擴充套件性的功能單獨作為一個模組編寫,最後再
用一個總體排程的模組,確定具體要執行哪一種功能。
比如開發一個計算器的功能。首先需要把介面展現和業務功能完全獨立開來。分成不同模組去編寫。之後考慮到計算機的基礎功能運算有:
加、減、乘、除。就把這四種功能分別寫出,最後通過排程工廠類來確定要實現具體哪一種功能。
相比於傳統的寫法,簡單工廠模式的好處在於如果之後需要增加求平方、開方等功能,只要新增相應的方法,在排程類中增加該方法的判斷,
其餘的功能都不需要進行改動。(頁面調整除外)一定程度愛上增加了程式碼的靈活性,方便後期對功能進行擴充套件。
以下是簡單工廠模式的計算機後臺功能部分程式碼:
1、基礎功能類
/** * 操作類 */ public class Operator { private double number_A = 0; private double number_B = 0; public double getNumber_A() { return number_A; } public void setNumber_A(double number_A) { this.number_A = number_A; } public double getNumber_B() { return number_B; } public void setNumber_B(double number_B) { this.number_B = number_B; } public double getResult() { double result = 0; return result; } }
2、具體功能方法:
public class OperatorAdd extends Operator {
@Override
public double getResult() {
double result = 0;
result = getNumber_A() + getNumber_B();
return result;
}
}
public class OperatorSub extends Operator {
@Override
public double getResult() {
double result = 0;
result = getNumber_A() - getNumber_B();
return result;
}
}
public class OperatorMul extends Operator {
@Override
public double getResult() {
double result = 0;
result = getNumber_A() * getNumber_B();
return result;
}
}
public class OperatorDiv extends Operator {
@Override
public double getResult() {
double result = 0;
if (getNumber_B() == 0) {
new Exception("除數不能為0");
}
result = getNumber_A() / getNumber_B();
return result;
}
}
3、工廠類:
/**
* 工廠類
*/
public class OperationFactory {
public static Operator createOperator(String operator) {
Operator oper = null;
switch (operator) {
case "+":
oper = new OperatorAdd();
break;
case "-":
oper = new OperatorSub();
break;
case "*":
oper = new OperatorMul();
break;
case "/":
oper = new OperatorDiv();
break;
}
return oper;
}
}
4、具體操作方法:
public class Caculator {
public static void main(String[] args) {
Operator operator;
operator = OperationFactory.createOperator("/");
operator.setNumber_A(3);
operator.setNumber_B(4);
double result = operator.getResult();
System.out.println(result);
}
}