java設計模式之一(簡單工廠模式)


運算類
public class Operation {


protected int numberA;

protected int numberB;


public double getReslut(){

double result=0;

return result;
}


public int getNumberA() {
return numberA;
}

public void setNumberA(int numberA) {
this.numberA = numberA;
}

public int getNumberB() {
return numberB;
}

public void setNumberB(int numberB) {
this.numberB = numberB;
}
}


------工廠類------
public class OperationFactory {

public static Operation createOperation(String type){

Operation oper=null;
switch(type){
case "+":
oper=new OperationAdd();
break;
case "-":
oper=new OperationDiv();
break;
default: break;
}
return oper;
}

}

-----加法運算類繼承算法類----
public class OperationAdd extends Operation {

public double getReslut(){

double result=numberA+numberB;

return result;
}

}

----減法運算類繼承算法類----
public class OperationDiv extends Operation {


public double getReslut(){

double result=numberA-numberB;
return result;
}
}

-----客戶端代碼---
@Test
public void GeneralTest() {

OperationFactory factory=new OperationFactory();

Operation oper= factory.createOperation("+");
oper.numberA=10;
oper.numberB=8;
double result=oper.getReslut();

System.out.println(result);
}

應用場景:算法

  當沒有使用工廠模式的時候,每一個「產品」類都是分散的,沒有使用一個工廠接口把它們整合起來,並且,加入例子裏面生產productA須要傳入三個「原料」參數,使用者要清晰地知道這些參數才能把productA類實例化,每一個產品參數不一樣的話,會讓使用者很是凌亂,使用「工廠」則能夠把參數封裝在裏面,讓使用者不用知道具體參數就能夠實例化出所須要的「產品」類。編程

優勢:this

將建立實例的工做與使用實例的工做分開,使用者沒必要關心類對象如何建立,明確了職責。對象

把初始化實例時的工做放到工廠裏進行,使代碼更容易維護。 更符合面向對象的原則,面向接口編程,而不是面向實現編程。繼承

缺點:接口

  1. 因爲工廠類集中了全部產品建立邏輯,一旦不能正常工做,整個系統都要受到影響。
  2. 要新增產品類的時候,就要修改工廠類的代碼,違反了開放封閉原則(對擴展的開放,對修改的關閉)。
  3. 簡單工廠模式因爲使用了靜態工廠方法,靜態方法不能被繼承和重寫,會形成工廠角色沒法造成基於繼承的等級結構。
相關文章
相關標籤/搜索