设计模式之简单工厂模式

2019-09-29  本文已影响0人  吃货大米饭

一、需求

用任意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符号,等到结果。

二、实现

import org.slf4j.LoggerFactory
import scala.io.StdIn

object Program {
  private val logger = LoggerFactory.getLogger(this.getClass)

  def main(args: Array[String]): Unit = {
      try {
        print("请输入数字A:")
        val strNumberA = StdIn.readLine()
        print("请输入操作符号(+,-,*,/):")
        val strOperate = StdIn.readLine()
        print("请输入数字B:")
        val strNumberB = StdIn.readLine()

        val operation = OperationFactory.createOperate(strOperate)
        operation._numberA = strNumberA.toDouble
        operation._numberB = strNumberB.toDouble
        println(operation.getResult())
      } catch {
        case e:Exception => logger.error("输入的数字非法")
      }
  }
}
class Operation {

  var _numberA: Double = 0
  var _numberB: Double = 0

  def getResult(): Double = {
    val result = 0
    result
  }
}
class OperationAdd extends Operation {

  override def getResult(): Double = {
    var result: Double = 0
    result = _numberA + _numberB
    result
  }
}

class OperationDiv extends Operation {

  override def getResult(): Double = {
    var result: Double = 0
    if (_numberB == 0) throw new Exception("除数不能为0")
    result = _numberA / _numberB
    result
  }

}

class OperationMul extends Operation {
  
  override def getResult(): Double = {
    var result: Double = 0
    result = _numberA * _numberB
    result
  }

}

class OperationSub extends Operation {

  override def getResult(): Double = {
    var result: Double = 0
    result = _numberA - _numberB
    result
  }

}
object OperationFactory {

  def createOperate(operate:String): Operation ={
    operate match {
      case "+"=>new OperationAdd()
      case  "-"=>new OperationSub()
      case "*"=>new OperationMul()
      case "/"=>new OperationDiv()
      case _=>throw new Exception("无法识别操作符")
    }
  }
}

三、详解

上一篇 下一篇

猜你喜欢

热点阅读