简易计算器之工厂设计模式(最终章)

Operation抽象类

/**
 * 运算的抽象类
 */
public abstract class Operation {
  public double numFir;
  public double numSec;

  public abstract double getResult();

  // 单参数
  public Operation(double numFir) {
    super();
    this.numFir = numFir;
  }

  // 双参数
  public Operation(double numFir, double numSec) {
    super();
    this.numFir = numFir;
    this.numSec = numSec;
  }


  public double getNumFir() {
    return numFir;
  }

  public void setNumFir(double numFir) {
    this.numFir = numFir;
  }

  public double getNumSec() {
    return numSec;
  }

  public void setNumSec(double numSec) {
    this.numSec = numSec;
  }

}

OperationFactory工厂类

/**
 * 操作工厂类
 */
public class OperationFactory {


  public static Operation createOperation(double numFir, double numSec, char operator) {

    Operation oper = null;

    switch (operator) {
      case '+': {
        oper = new Add(numFir, numSec);
        break;
      }
      case '-': {
        oper = new Subtract(numFir, numSec);
        break;
      }
      case '*': {
        oper = new Multiply(numFir, numSec);
        break;
      }
      case '/': {
        oper = new Divide(numFir, numSec);
        break;
      }
      default:
        try {
          throw new Exception("No Such Method");
        } catch (Exception e) {
          e.printStackTrace();
        }
        break;
    }
    return oper;
  }
}

具体Operation运算类

加法

/**
 * 加法
 */
public class Add extends Operation {

  public Add(double numFir, double numSec) {
    super(numFir, numSec);
  }

  @Override
  public double getResult() {
    return numFir + numSec;
  }

}

减法

/**
 * 減法
 */
public class Subtract extends Operation {

  public Subtract(double numFir, double numSec) {
    super(numFir, numSec);
    // TODO Auto-generated constructor stub
  }

  @Override
  public double getResult() {
    // TODO Auto-generated method stub
    return numFir-numSec;
  }

}

乘法

/**
 * 乘法
 */
public class Multiply extends Operation{

  public Multiply(double numFir, double numSec) {
    super(numFir, numSec);
    // TODO Auto-generated constructor stub
  }

  @Override
  public double getResult() {
    // TODO Auto-generated method stub
    return numFir*numSec;
  }

}

除法

/**
 * 除法
 */
public class Divide extends Operation{

  public Divide(double numFir, double numSec) {
    super(numFir, numSec);
    // TODO Auto-generated constructor stub
  }

  @Override
  public double getResult() {
    // TODO Auto-generated method stub
    double result = 0;
    try {
      result=numFir/numSec;
    } catch (Exception e) {
      // TODO Auto-generated catch block
      try {
        throw new Exception("被除数不能为0");
      } catch (Exception e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
      }
    }
    return result;
  }

}

测试

public class Test {

  public static void main(String[] args) {

    System.out.println(OperationFactory.createOperation(1.3D, 4.0D, '+').getResult());
  }

}

计算器代码地址:
https://github.com/Haskell2015/MaterialDesign/tree/master/calculator

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值