<Java設計模式>—簡單工廠模式
簡單工廠模式又稱靜態工廠方法模式。重命名上就可以看出這個模式一定很簡單。它存在的目的很簡單:定義一個用於創建對象的接口。
在簡單工廠模式中,一個工廠類處於對產品類實例化調用的中心位置上,它決定那一個產品類應當被實例化,如同一個交通警察站在來往的車輛流中,決定放行那一個方向的車輛向那一個方向流動一樣。
先來看看它的組成:
1) 工廠類角色:這是本模式的核心,含有一定的商業邏輯和判斷邏輯。在java中它往往由一個具體類實現。
2) 抽象產品角色:它一般是具體產品繼承的父類或者實現的接口。在java中由接口或者抽象類來實現。
3) 具體產品角色:工廠類所創建的對象就是此角色的實例。在java中由一個具體類實現。
下面來看下一個運算對象的簡單工程的設計模式UML:
具體的對應關係:
工廠類角色——>簡單工廠類
抽象產品角色——>運算類
具體產品角色——>加法類,減法類,乘法類,除法類
根據上面UML,寫咱們的代碼:
/**
* 運算類
*/
abstract class Operation{
public double numberA;
public double numberB;
public abstract double getResult();
}
/**
* 加法類(減法(OperationSub)、乘法(OperationMul)、除法(OperationDiv)請參考加法寫法)
*/
class OperationAdd extends Operation{
public double getResult(){
return numberA+numberB;
}
}
/**
* 簡單工廠類
*/
class OperationFactory{
public static final int ADD = 1;//加法
public static final int SUB = 2;//減法
public static final int MUL = 3;//乘法
public static final int DIV = 4;//除法
public Operation createOperation(int operationType){
swtich(operationType){
case ADD:
return new OperationAdd();
break;
case SUB:
return new OperationSub();
break;
case MUL:
return new OperationMul();
break;
case DIV:
return new OperationDiv();
break;
}
}
}
/**
* 客戶端代碼
**/
class Client{
public static void main(String[] args){
Operation operation= OperationFactory.createOperation(OperationFaction.ADD);
Operation.numberA = 22;
Operation.numberB = 23;
System.out.println(“遠算結果:”+operation.getResult());
}
}
個人總結:相對於之前直接new出對象,降低了耦合性,客戶端只要認識兩個類(Operation、OperationFactory),也就是說客戶端都無需導入像加法類,減法類等的包,客戶端只需給2數,和相應的計算方式,然後得出結果,至於你是怎麼運算,客戶端並不關心;但是有個弊端就是假如將來需要拓展,那就比較麻煩了,那我們就必須去修改OperationFactory這個類中的switch代碼,如果將來拓展很多的算法,那麼這個類將是非常臃腫的。