请设计并实现下面的Web应用
有一个名为inputNumber.jsp的页面提供一个表单,用户可以通过表单输入两个数和运算符号提交给Servlet控制器;由名为ComputerBean.java生成的JavaBean负责存储运算数、运算符号和运算结果,由名为handleComputer的servlet控制器负责运算,将结果存储到JavaBean中,并负责请求JSP页面lookResult.jsp显示JavaBean中的数据。
实验截图:
实验代码:
view层
model层
Controller层
使用简单工厂模式改进
实验截图同上。
实验代码
1.将运算抽离出来,成为一个运算父类Operation
package com.whd.bean.operation;
/**
* 计算父类
* @author:whd
* @createTime: 2021/11/11
*/
public class Operation {
private Double num1;
private Double num2;
public Double getResult(){
return (double) 0;
}
public Double getNum1() {
return num1;
}
public void setNum1(Double num1) {
this.num1 = num1;
}
public Double getNum2() {
return num2;
}
public void setNum2(Double num2) {
this.num2 = num2;
}
}
2.分别实现加减乘除,继承运算父类
package com.whd.bean.operation;
/**
* 加法操作类
* @author:whd
* @createTime: 2021/11/11
*/
public class OperationAdd extends Operation{
@Override
public Double getResult() {
Double result = super.getNum1() + super.getNum2();
return result;
}
}
package com.whd.bean.operation;
/**
* @author:whd
* @createTime: 2021/11/11
*/
public class OperationDiv extends Operation{
@Override
public Double getResult() {
Double result;
if (super.getNum2() == 0) {
throw new RuntimeException("除数不能为0");
}
result = super.getNum1() / super.getNum2();
return result;
}
}
package com.whd.bean.operation;
/**
* 乘法运算类
* @author:whd
* @createTime: 2021/11/11
*/
public class OperationMul extends Operation{
@Override
public Double getResult() {
Double result = super.getNum1() * super.getNum2();
return result;
}
}
package com.whd.bean.operation;
/**
* 减法操作类
* @author:whd
* @createTime: 2021/11/11
*/
public class OperationSub extends Operation{
@Override
public Double getResult() {
Double result = super.getNum1() - super.getNum2();
return result;
}
}
3. 实验运算工厂类,用于创建Operation实例
package com.whd.bean.factory;
import com.whd.bean.operation.*;
/**
* 运算工厂类
* @author:whd
* @createTime: 2021/11/11
*/
public class OperationFactory {
public static Operation createOperation(String operate){
Operation op = null;
switch (operate){
case "+":
op = new OperationAdd();
break;
case "-":
op = new OperationSub();
break;
case "*":
op = new OperationMul();
break;
case "/":
op = new OperationDiv();
break;
default:
throw new RuntimeException("运算符号有误");
}
return op;
}
}
4. 修改handleComputer的代码
package com.whd.web.servlet;
import com.whd.bean.ComputerBean;
import com.whd.bean.factory.OperationFactory;
import com.whd.bean.operation.Operation;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author:whd
* @createTime: 2021/11/10
*/
public class handleComputer extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ComputerBean computerBean = (ComputerBean) req.getAttribute("computerBean");
String tag = computerBean.getTag();
try {
Operation operation = OperationFactory.createOperation(tag);
operation.setNum1(computerBean.getNum1());
operation.setNum2(computerBean.getNum2());
Double result = operation.getResult();
computerBean.setResult(result);
req.setAttribute("computerBean",computerBean);
req.getRequestDispatcher("/lookResult.jsp").forward(req,resp);
} catch (Exception e) {
e.printStackTrace();
req.setAttribute("computerBean","error");
req.getRequestDispatcher("/lookResult.jsp").forward(req,resp);
return;
}
}
}
总结
后续增加运算,只需创建相关的类,然后继承Operation类实现getResult方法即可。然后再去修改工厂类,新增一个分支判断。