運算類
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
將建立實例的工做與使用實例的工做分開,使用者沒必要關心類對象如何建立,明確了職責。對象
把初始化實例時的工做放到工廠裏進行,使代碼更容易維護。 更符合面向對象的原則,面向接口編程,而不是面向實現編程。繼承
缺點:接口