大話設計模式java版--簡單工廠模式
阿新 • • 發佈:2019-02-14
剛剛學習了系統分析與設計,發現設計模式真的是個好東西。因此看了下好久之前買的《大話設計模式》,因此總結下最近的學習的設計模式,廢話到此結束。
這裡的程式碼跟書上的差不多,但書上的是C#版的,這裡我自己重新寫的是Java的。。。。其實都差不多,好不好
現在就簡單說說簡單工廠模式:
需求:設計個計算器,兩個數字之間的加減乘除基本運算。
分析:計算器加減乘除是基本運算,萬一使用者需要新增新運算,例如n次方。
設計:將演算法類抽象為抽象類,具體演算法繼承演算法類。
程式碼:
運算抽象類:
具體演算法:package com.jing.simpleFactory; public abstract class Operation { public double getNum1() { return num1; } public void setNum1(double num1) { this.num1 = num1; } public double getNum2() { return num2; } public void setNum2(double num2) { this.num2 = num2; } protected double num1; protected double num2; public abstract double getResult() throws Exception; }
package com.jing.simpleFactory;
public class OperationDiv extends Operation{
@Override
public double getResult() throws Exception {
if(num2 == 0){
throw new Exception("除數不能為0");
}
return num1/num2;
}
}
package com.jing.simpleFactory; public class OperationAdd extends Operation{ @Override public double getResult() { return num1 + num2; } }
package com.jing.simpleFactory;
public class OperationMul extends Operation{
@Override
public double getResult() throws Exception {
return num1 * num2;
}
}
package com.jing.simpleFactory; public class OperationSub extends Operation{ @Override public double getResult() { return num1 - num2; } }
簡單工廠:
package com.jing.simpleFactory;
public class OperationFactory {
public static Operation createOperation(String operate){
if(operate.equals("+")){
return new OperationAdd();
}else if(operate.equals("-")){
return new OperationSub();
}else if(operate.equals("*")){
return new OperationMul();
}else if(operate.equals("/")){
return new OperationDiv();
}else{
return null;
}
}
}
Main函式:
package com.jing.simpleFactory;
public class Test {
public static void main(String[] args) {
//ver1.0
//// Test test = new Test();
//// System.out.println(test.add(1,2));
// System.out.println("請輸入兩個數字");
// Scanner scan = new Scanner(System.in);
// String num1 = scan.next();
// scan = new Scanner(System.in);
// String num2 = scan.next();
// System.out.println("輸入符號");
// scan = new Scanner(System.in);
// String oper = scan.next();
// if(oper.equals("+")){
//
// }else if(oper.equals("-")){
//
// }else if(oper.equals("*")){
//
// }else if(oper.equals("/")){
//
// }
// System.out.println(num1 + " " +num2 +" "+ oper);
//
// //ver2.0
// Operation oper = new OperationAdd();
// oper.setNum1(1.1);
// oper.setNum2(2.2);
// try {
// System.out.println(oper.getResult());
// } catch (Exception e) {
// e.printStackTrace();
// }
//ver3.0
Operation oper = OperationFactory.createOperation("/");
oper.setNum1(1.1);
oper.setNum2(3);
try {
System.out.println(oper.getResult());
} catch (Exception e) {
e.printStackTrace();
}
}
}
大家結合著書來看會更有益處。其中main函式中有三個版本哦:三個版本也是不斷進步的版本。
大家先看看main函式中版本ver1.0:
這是最開始的版本。ui程式碼與演算法程式碼結合在一起,這種版本的程式碼修改起來牽連太多。
ver2.0:
在2.0版本中,new生成物件處理交給了客戶端處理了。
ver3.0(最終版本 簡單設計模式):
在這版本中利用工廠控制了物件生成的處理,如果需求修改的話,就要修改工廠類和新增上相應的演算法類。