总体的目录结构如下

1.基础工厂类

public interface BaseFactory {}

2.拓展工厂类

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.基础操作类

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

public interface OperationAddService {/*** 两个数相加** @return*/Double getResult();}

5.除法Service

public interface OperationDivService {/*** 两数相除得到的结果** @return*/Double getResult();}

6.乘法Service

public interface OperationMulService {/*** 两个数相乘的结果** @return*/Double getResult();}

7.减法Service

public interface OperationSubService {/*** 两个数的减法** @return*/Double getResult();}

8.加法ServiceImpl

public class OperationAddServiceImplextends Operationimplements OperationAddService {@Overridepublic Double getResult() {Double result =0D;result =numberA +numberB ;return result;}}

9.除法ServiceImpl

public class OperationDivServiceImplextends Operationimplements OperationDivService {@Overridepublic Double getResult() {Double result =0D;if (numberB ==0){throw new LogicalException("除数不能为0");}result =numberA /numberB ;return result;}}

10.减法ServiceImpl

public class OperationSubServiceImplextends Operationimplements OperationSubService {@Overridepublic Double getResult() {Double result =0D;result =numberA -numberB ;return result;}}

11.Controller层

@Controller
public class OperationController {@AutowiredOperationServiceoperationService;@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来作为前端展示

<!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>

Java工厂设计模式(简单计算器实现)相关推荐

  1. 用java编写一个简单计算器

    java 采用java编写一个简单计算器,使用awt和swing 代码如下: import java.awt.Color; import java.awt.Font; import java.awt. ...

  2. JAVA编写的简单计算器程序

    系列文章目录 文章目录 系列文章目录 前言 一.JAVA编写的简单计算器程序 前言 链接:https://pan.baidu.com/s/1oPJRIbwxcXgewZ_KZaWzTg 提取码:egy ...

  3. Java 工厂设计模式

    简介 工厂设计模式在java中有大量的应用,如spring框架,这种类型的设计模式属于创建型模式.在工厂设计模式中,创建逻辑不会对客户端暴露,可以通过一个对外接口创建所需对象. 工厂模式使用场景 需要 ...

  4. Java工厂设计模式

    工厂设计模式 一.面向对象的设计原则 1.1 OCP(开闭原则,Open-Closed Principle) 1.2 DIP(依赖倒转原则,Dependence Inversion Principle ...

  5. Android工厂设计模式(简单工厂,工厂方法,抽象工厂,BitmapFactory简单工厂分析,Retrofit抽象工厂分析)

    文章目录 创建型设计模式(简单工厂,工厂方法,抽象工厂) 一.简单工厂模式 引出简单工厂模式 二.工厂方法模式 三.抽象工厂模式 Android源码中用到的工厂模式举例 一.BitmapFactory ...

  6. Java Swing写简单计算器以及拓展贷款计算器(等额本息和等额本金计算可以单独拿出来用)

    1. 简单计算器 纯手写 package com.jisuanqi;import com.sun.xml.internal.ws.util.StringUtils;import javax.swing ...

  7. 工厂设计 java,java 工厂设计模式

    一.简单工厂模式 简单工厂模式就是创建一个工厂类,对实现同一个接口的类进行实例化.其UML图如下: package com.hs.pattern.factory; public interface S ...

  8. java工厂设计模式(适合新人)

    设计模式最常用的就是单例和工厂模式,单例的话主要是面试中会经常遇到,而工厂实际应用比较多,面试出现的几率也不小,话不多说,开始今天的课程. 1,什么是工厂设计模式 个人理解:工厂设计模式可以理解为一个 ...

  9. java 设计作业——简单计算器

    设计要求: 设计一个计算器,用GUI画出来一个图形界面,有两个输入框,一个输出框,有4个加减乘除按钮,实现简单的加减乘除功能. code: import java.awt.*; import java ...

最新文章

  1. 科学教师与实验教师工作计算机,计算机实验指导教师工作职责
  2. MySQL中的Text类型
  3. 最小覆盖字串—leetcode76
  4. 机器学习算法机器人足球_购买足球队:一种机器学习方法
  5. 配置springboot在访问404时自定义返回结果以及统一异常处理
  6. 邮票的孔怎么做出来的_金银花茶是怎么做出来的呢
  7. ‘utf-8‘ codec can‘t decode byte 0xb8 in position 0: invalid start byte
  8. ❤️Spring的静态、动态代理模式
  9. JSK-135 数字加1【大数】
  10. 白板推导系列Pytorch-高斯判别分析(GDA)
  11. 9. 工作区和暂存区
  12. 新中大银色快车数据恢复
  13. Android Q共享音频输入
  14. openpyxl 添加分页符
  15. python爬取谷歌学术_python爬取谷歌热度
  16. 手机浏览器哪家强,这3款口碑极佳的浏览器值得一用
  17. 机房的防火墙有何作用
  18. postfix反垃圾邮件
  19. Pandas基础入门(一)
  20. 攻防世界 —— Crypto新手练习区7题(不仅仅是Morse)题解

热门文章

  1. 电骡协议规范(三):客户端和服务器之间的UDP通讯
  2. 计算机毕业设计ssm双笙映画ou5oj系统+程序+源码+lw+远程部署
  3. 【Python】pandas中的loc函数
  4. 一个准大龄女程序员的婚姻线
  5. C语言指针学习(1)
  6. linux允许佚名用户访问权限,Linux上的ACL权限文件访问
  7. dayz服务器刷车文件在哪里,» Dayz 服务器 汽车消失怎么办
  8. Building guests
  9. 【每日一道智力题】之高楼扔只因蛋
  10. 不错的耳机 Grado PS-1 全球限量版本