场景

今天遇到一个面试题,题目为“C++、Java、或VB.NET任意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果”。

问题分析

通常面对这样的问题,会心有成竹、下笔有神,心想写一个简易的计算机控制程序还不简单吗?不就是输入数字,在输入符号,最后得出结果。但是这个题目真的只是考验这个逻辑吗?所有的编程初学者都会有这样的问题,就是碰到问题就直觉地用计算机能够理解的逻辑来描述和表达待解决的问题及具体的求解过程。这其实是用计算机的方式去思考,比如计算器这个程序,先要求输入两个数和符号,然后根据运算符号判断选择如何运算,得到结果,这个本身没有错误,但是这样的思维却使我们的程序只为满足实现当前的需求,程序不容易维护,不容易扩展,更不容易复用。从而达不到高质量代码的要求。为了达到可维护、可扩展、可复用的目的我们选用简单工厂模式。

解决方案

新建运算类

运算类中包含两个数字及一个方法。

package com.qqkj.design.demo1.entity;/*** 运算类* @author hgq*/
public class Operation {private double numberA = 0;private double numberB = 0;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;}public double getResult(){double result = 0;return result;}
}

新建加法类使之继承运算类

package com.qqkj.design.demo1.entity;/*** 加法类* @author hgq*/
public class OperationAdd extends Operation{@Overridepublic double getResult() {double numberA = super.getNumberA();double numberB = super.getNumberB();return numberA + numberB;}
}

新建减法类使之继承运算类

package com.qqkj.design.demo1.entity;/*** 减法类* @author hgq*/
public class OperationSub extends Operation{@Overridepublic double getResult() {double numberA = super.getNumberA();double numberB = super.getNumberB();return numberA - numberB;}
}

新建乘法类使之继承运算类

package com.qqkj.design.demo1.entity;/*** 乘法类* @author hgq*/
public class OperationMul extends Operation{@Overridepublic double getResult() {return super.getNumberA()*super.getNumberB();}
}

新建除法类使之继承运算类

package com.qqkj.design.demo1.entity;/*** 乘法类* @author hgq*/
public class OperationDiv extends Operation{@Overridepublic double getResult() {double result = 0;double numberA = super.getNumberA();double numberB = super.getNumberB();if(numberB == 0){throw new RuntimeException("除数不能为0");}else {result = numberA / numberB;}return result;}
}

新建运算工厂类

package com.qqkj.design.demo1.entity;/*** 运算工厂类* @author hgq*/
public class OperationFactory {public static Operation createOperation(String operate){Operation oper = null;switch (operate){case "+":oper = new OperationAdd();break;case "-":oper = new OperationSub();break;case "*":oper = new OperationMul();break;case "/":oper = new OperationDiv();break;}return oper;}
}

新建测试类

package com.qqkj.design.demo1.controller;import com.qqkj.design.demo1.entity.Operation;
import com.qqkj.design.demo1.entity.OperationFactory;public class OperationTest {public static void main(String[] args) {Operation operation = OperationFactory.createOperation("+");operation.setNumberA(10);operation.setNumberB(11);double result = operation.getResult();System.out.println("结果为:"+result);}
}

总结

还没想好。。。。。。。

简单工厂模式-实现简易计算器相关推荐

  1. java 工厂模式 计算器_简单工厂模式实现简易计算器

    packageFactoryMethodPattern;/*创建人:czc 创建时间:2019/12/16 创建用途:简单工厂模式实现计算器--主界面*/ import javax.swing.*;i ...

  2. 设计模式--简单工厂模式

    什么是工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对 ...

  3. 基于简单工厂模式的计算器程序

    这个计算器是我学Java时写的第一个Swing程序,后来我读<大话设计模式>的第一章简单工厂模式恰好也是计算器,于是就改进了之前这个. 源代码下载:https://github.com/m ...

  4. [Python设计模式] 第1章 计算器——简单工厂模式

    github地址:https://github.com/cheesezh/python_design_patterns 写在前面的话 """ 读书的时候上过<设计模 ...

  5. 简单工厂模式_计算器实现

    优点: 1.不用自己再去new对象,工厂会根据给的标识,自动替你new出一个你想要的实现类对象. 2.一定程度上在加减乘除之间实现了解耦合.提高了代码的复用性和扩展性. 缺点:违反了开闭性,即新增功能 ...

  6. 大话设计模式之简单工厂模式

    一.简单工厂模式 1.起因 最近在看一本大话设计模式一书,感觉上面讲述的富有故事性,引导你一步一步的走进设计模式的世界.首先我先看到的是简单工厂模式,对此我想给自己做一个总结,给自己做一个提示. 2. ...

  7. Net设计模式之简单工厂模式(Simple Factory Pattern)

    一.简单工厂模式简介(Bref Introduction)        简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实 ...

  8. python的编程模式-使用简单工厂模式来进行Python的设计模式编程

    计模式的目的是让代码易维护.易扩展,不能为了模式而模式,因此一个简单的工具脚本是不需要用到任何模式的. 简单工厂模式又叫静态工厂方法模式,工厂模式家族中最简单的一种模式.这个模式的基本工作方式: 通过 ...

  9. 大话设计模式Python实现-简单工厂模式

    简单工厂模式(Simple Factory Pattern):是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 下面使用简单工厂模式实现一个简单的四则运算 1 #!/us ...

  10. 大话设计模式(五 体会简单工厂模式的美妙)

    (续上篇) 次日,小菜再来找大鸟,问道:"你昨天说计算器这样的小程序还可以用到面向对象三大特性?继承和多态怎么可能用得上,我实在不可理解."         大鸟:"小菜 ...

最新文章

  1. 难忘的一天——装操作系统(一)
  2. 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)
  3. 连续发表三篇核酸研究数据库文章
  4. AI、ML 和数据工程 | InfoQ 趋势报告(2021 年)
  5. 临时表空间过大解决方法
  6. 前端利器倚天剑之sublime
  7. python在电脑哪可以找到_哪里可以找到比较靠谱的Python教程?
  8. mac上python无法import redis
  9. python杨长兴版答案,c++程序设计课后习题答案(杨长兴 ,刘卫国主编)1111
  10. matlab有限域多项式除法_域上的多项式环(3) - 多项式同余理论
  11. x = cos x 的解析形式
  12. 一文搞懂什么是免疫算法Immune Algorithm【详细介绍】
  13. java程序设计基础陈国君_Java程序设计基础(第6版)
  14. Word2010经常莫名其妙无法撤销
  15. Java:Stream三部曲(三):Stream流处理器
  16. 机器学习项目一:共享单车
  17. 《鸟哥的Linux私房菜》chapter7 20180827~20180831
  18. JLINK在线调试——软件调试方法与技巧
  19. Greenplum 实时数据仓库实践(8)——事实表技术
  20. 某些软件中,输入法无法输入中文

热门文章

  1. access数据库代做_矿井三维模型(代做矿山模型)
  2. 强烈推荐:创业起步 八种赢利模式
  3. 以淘宝网为例,解析大型Java项目架构演进
  4. 安卓手机怎么投屏台式计算机,怎么将手机投屏到台式电脑上
  5. 如何写一篇高质量的伪原创文章
  6. Matlab实现两个矩阵的加法、乘法计算器
  7. 专访Token经济设计专家叶开:Token设计画布与10大设计模式
  8. ImageAI (二) 使用Python快速简单实现物体检测 Object Detection
  9. SqlMap常用命令
  10. arcgis中python计算面积的表达式_ArcGIS字段计算器中的python函数