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. 简单工厂模式因为使用了静态工厂方法,静态方法不能被继承和重写,会形成工厂角色没法造成基于继承的等级结构。
相关文章
相关标签/搜索