大话设计模式中简单工厂模式笔记

拿计算器举例:

  要实现简单的计算器功能,计算类需要根据输入的计算符号完成相应的工作,可以先创建一个计算父类BaseOperation

public class BaseOperation {

  private Double numberA;
  private Double numberB;

  public Double getNumberA() {
    return numberA;
  }

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

  public Double getNumberB() {
    return numberB;
  }

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

  public Double getResult() throws Exception {
    Double result=0d;
    return result;
  }
}

  计算父类中包含前后数字和一个获得结果的方法,之后创建计算子类,继承父类的成员numberA和numberB,重写getResult方法

public class OperationAdd extends BaseOperation{

  @Override
  public Double getResult() {
    Double result=0d;
    result=getNumberA()+getNumberB();
    return result;
  }
}
public class OperationSub extends BaseOperation{
  @Override
  public Double getResult() {
    Double result=0d;
    result=getNumberA()-getNumberB();
    return result;
  }
}
public class OperationMul extends BaseOperation{

  @Override
  public Double getResult() {
    Double result=0d;
    result=getNumberA()*getNumberB();
    return result;
  }
}
public class OperationDiv extends BaseOperation{
  @Override
  public Double getResult() throws Exception{
    Double result=0d;
    if(getNumberB()==0){
      throw new Exception("除数不能为0");
    }
    result=getNumberA()/getNumberB();
    return result;
  }
}

  这里只实现了加减乘除的子类,之后创建一个工厂类来生产计算类,根据传入的计算符号生产相应的计算类

public class OperationFactory {

  public static BaseOperation createOperation(String operation) throws Exception{
    BaseOperation baseOperation=null;

    switch (operation){
      case "+":
        baseOperation=new OperationAdd();
        break;
      case "-":
        baseOperation=new OperationSub();
        break;
      case "*":
        baseOperation=new OperationMul();
        break;
      case "/":
        baseOperation=new OperationDiv();
        break;
      default:
        throw new Exception("输入运算符格式不对");
    }

    return baseOperation;
  }
}

  在主方法中调用

public static void main(String[] args) throws Exception{
    BaseOperation operation = OperationFactory.createOperation("+");
    operation.setNumberA(2d);
    operation.setNumberB(8d);
    Double countResult = operation.getResult();
    System.out.println(countResult);
  }

  需要新的计算功能时只需要创建相关的子类,并修改工厂类的代码即可。虽然是一个简单的计算器实现,但是运用上简单工厂模式后,让代码的可维护性,可扩展性,灵活性都大大的增加了。

  个人理解,工厂模式就是将有相同成员变量功能相近的类,先抽象出一个父类,之后根据不同的功能去创建子类重写功能代码,然后通过工厂类传入判断条件,判断需要哪个功能类,由工厂来创建功能类供其他方法调用。

posted @ 2019-04-12 11:26  白龙守  阅读(94)  评论(0编辑  收藏  举报