前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java工厂设计模式(简单计算器实现)

Java工厂设计模式(简单计算器实现)

作者头像
cwl_java
发布2019-10-26 20:43:44
1.2K0
发布2019-10-26 20:43:44
举报
文章被收录于专栏:cwl_Java

总体的目录结构如下

在这里插入图片描述
在这里插入图片描述
1.基础工厂类
代码语言:javascript
复制
public interface BaseFactory {

}
2.拓展工厂类
代码语言:javascript
复制
public class OperationFactoryimplements BaseFactory{

    /**
     * 工厂类的本质是帮助判断对应的实例,将这种判断放在工厂当中,那么就节省了让操作类自己来进行操作的性能判断,这是使用多态来解决父类和子类之间的差异
     *
     * @param operation
     * @return
     */
    public static Operation createOperation(String operation) {

        Operation oper =null;

        switch (operation) {

            case "+":

                oper =new OperationAddServiceImpl();

                break;

            case "-":

                oper =new OperationSubServiceImpl();

                break;

            case "*":

                oper =new OperationMulServiceimpl();

                break;

            case "/":

                oper =new OperationDivServiceImpl();

                break;

        }

        return oper;

    }

}
3.基础操作类
代码语言:javascript
复制
public class Operation {

    protected DoublenumberA;

    protected DoublenumberB;

    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;

    }

    /**
     * 子类当中复写了当前方法,所以会优先使用子类的方法,这就是一种多态的用法
     *
     * @return
     */

    public Double getResult() {

        Double result =0D;

        return result;

    }

}
4.加法Service
代码语言:javascript
复制
public interface OperationAddService {

    /**
     * 两个数相加
     *
     * @return
     */
    Double getResult();

}
5.除法Service
代码语言:javascript
复制
public interface OperationDivService {

    /**
     * 两数相除得到的结果
     *
     * @return
     */
    Double getResult();

}
6.乘法Service
代码语言:javascript
复制
public interface OperationMulService {

    /**
     * 两个数相乘的结果
     *
     * @return
     */
    Double getResult();

}
7.减法Service
代码语言:javascript
复制
public interface OperationSubService {

    /**
     * 两个数的减法
     *
     * @return
     */
    Double getResult();

}
8.加法ServiceImpl
代码语言:javascript
复制
public class OperationAddServiceImplextends Operationimplements OperationAddService {

    @Override

    public Double getResult() {

        Double result =0D;

        result =numberA +numberB ;

        return result;

    }

}
9.除法ServiceImpl
代码语言:javascript
复制
public class OperationDivServiceImplextends Operationimplements OperationDivService {

    @Override

    public Double getResult() {

        Double result =0D;

        if (numberB ==0){

            throw new LogicalException("除数不能为0");

        }

        result =numberA /numberB ;

        return result;

    }

}
10.减法ServiceImpl
代码语言:javascript
复制
public class OperationSubServiceImplextends Operationimplements OperationSubService {

    @Override

    public Double getResult() {

        Double result =0D;

        result =numberA -numberB ;

        return result;

    }

}
11.Controller层
代码语言:javascript
复制
@Controller
public class OperationController {

    @Autowired

    OperationServiceoperationService;

    @RequestMapping("/index")

    public String index(){

        return "login";

    }

    @RequestMapping("/calculate")

    public String operation(Model model, Double numberA , Double numberB , String operation){

        Operation oper;

        oper = OperationFactory.createOperation(operation);

        oper.setNumberA(numberA);

        oper.setNumberB(numberB);

        model.addAttribute("result",oper.getResult());

        return "login";

    }

}
12.使用freemarker来作为前端展示
代码语言:javascript
复制
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>页面</title>

<body>

<form action="/calculate" method="post" >

    numberA:<input type="text" size="30" name="numberA"><br>

    numberB:<input type="text" size="30" name="numberB"><br>

    <select class="form-control" name="operation" id="state">

        <option value="+">+</option>

        <option value="-">-</option>

        <option value="*">*</option>

        <option value="/">/</option>

    </select><input type="submit" value="comfirm"><br>

    结果:<input type="text" value="${(result)!""}" readonly>

</form>

</body>

</html>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/04/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.基础工厂类
  • 2.拓展工厂类
  • 3.基础操作类
  • 4.加法Service
  • 5.除法Service
  • 6.乘法Service
  • 7.减法Service
  • 8.加法ServiceImpl
  • 9.除法ServiceImpl
  • 10.减法ServiceImpl
  • 11.Controller层
  • 12.使用freemarker来作为前端展示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档