运算类
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
将建立实例的工做与使用实例的工做分开,使用者没必要关心类对象如何建立,明确了职责。对象
把初始化实例时的工做放到工厂里进行,使代码更容易维护。 更符合面向对象的原则,面向接口编程,而不是面向实现编程。继承
缺点:接口