这个计算器是我学Java时写的第一个Swing程序,后来我读《大话设计模式》的第一章简单工厂模式恰好也是计算器,于是就改进了之前这个。

源代码下载:https://github.com/myCodingTrip/Calculator

运算类Operation.java

public abstract class Operation {protected double numberA = 0;protected double numberB = 0;protected double result = 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 abstract double getResult();
}class OperationAdd extends Operation{@Overridepublic double getResult() {double result = 0;result = numberA + numberB;return result;}
}
class OperationSub extends Operation{@Overridepublic double getResult() {result = numberA - numberB;return result;}
}
class OperationMul extends Operation{@Overridepublic double getResult() {result = numberA * numberB;return result;}
}
class OperationDiv extends Operation{@Overridepublic double getResult(){try {result = numberA / numberB;} catch (Exception e) {System.out.println("除数不能为0");e.printStackTrace();}return result;}
}

工厂类 OperationFactory.java
//简单工厂模式
//只需要传入运算符号,工厂就实例化出合适的对象,用过多态,返回父类的方式实现计算器的结果
public class OperationFactory {public static Operation createOperate(char sign) {Operation operation = null;switch (sign) {case '+':operation = new OperationAdd();break;case '-':operation = new OperationSub();break;case '*':operation = new OperationMul();break;case '/':operation = new OperationDiv();break;default:break;}return operation;}
}

计算器界面CalculateFrame.java
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;@SuppressWarnings("serial")
public class CalculateFrame extends JFrame{private JTextField textData1, textData2, textResult;private JLabel labelNum1, labelNum2, labelResult;private JRadioButton radioAdd, radioSub, radioMul, radioDiv;private JButton btnCalculate;private Operation oper;//进行运算的两个数字和结果private String data1, data2, operation;private double resultNum;public CalculateFrame(){        //设置窗口基本属性this.setTitle("简单计算器");this.setSize(300, 200);//本机分辨率为1366*768this.setLocation(1366/2-300/2, 768/2-200/2);//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        this.addWindowListener(new WindowAdapter(){@Overridepublic void windowClosing(WindowEvent e) {setVisible (false);System.exit(0);}});initView();initLayout();this.setVisible(true);//显示窗口btnCalculate.addActionListener(new ButtonListener());    }//设置一些功能区域public void initView() {textData1 = new JTextField();textData2 = new JTextField();textResult = new JTextField();textResult.setEnabled(false);labelNum1 = new JLabel("第一个数:");labelNum2 = new JLabel("第二个数:");labelResult = new JLabel("结果:");btnCalculate = new JButton("计算");radioAdd = new JRadioButton("+");radioSub = new JRadioButton("-");radioMul = new JRadioButton("*");radioDiv = new JRadioButton("/");}//将控件加入到布局中public void initLayout() {JPanel p1 = new JPanel(new GridLayout(1,2));p1.add(labelNum1);p1.add(textData1);JPanel p2 = new JPanel(new GridLayout(1,4));p2.add(radioAdd);p2.add(radioSub);p2.add(radioMul);p2.add(radioDiv);    JPanel p3 = new JPanel(new GridLayout(1,2));p3.add(labelNum2);p3.add(textData2);JPanel p4 = new JPanel(new GridLayout(1,2));p4.add(labelResult);p4.add(textResult);JPanel p5 = new JPanel(new GridLayout(1,1));p5.add(btnCalculate);    this.setLayout(new GridLayout(5,1));        this.add(p1);this.add(p2);this.add(p3);this.add(p4);this.add(p5);        ButtonGroup group = new ButtonGroup();group.add(radioAdd);group.add(radioSub);group.add(radioMul);group.add(radioDiv);}class ButtonListener implements ActionListener{//从程序中读入数据public void actionPerformed(ActionEvent e) {data1 = textData1.getText();data2 = textData2.getText();operation = "";if(radioAdd.isSelected())        operation = radioAdd.getText();else if(radioSub.isSelected())    operation = radioSub.getText();                else if(radioMul.isSelected())    operation = radioMul.getText();                else if(radioDiv.isSelected())    operation = radioDiv.getText();//将运算符号传入工厂中进行实例化oper = OperationFactory.createOperate(operation.charAt(0));oper.numberA = Double.parseDouble(data1);oper.numberB = Double.parseDouble(data2);resultNum = oper.getResult();textResult.setText(String.valueOf(resultNum));}}
}

主程序 Main.java
public class Main {public static void main(String[] args) {new CalculateFrame();}
}

程序界面:

转载于:https://www.cnblogs.com/mycd/p/5716328.html

基于简单工厂模式的计算器程序相关推荐

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

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

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

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

  3. 解读设计模式----简单工厂模式(SimpleFactory Pattern),你要什么我就给你什么

    本文首发于博客园,地址:http://www.cnblogs.com/beniao/archive/2008/08/09/1263318.html 一.模式概述 从设计模式的类型上来说,简单工厂模式是 ...

  4. Java设计模式之简单工厂模式实验(软件工程综合实践课程第二周)

    实验目的 1 .理解软件设计的相关理论 : 2 .理解面向对象设计原则: 实验内容 1 .简单工厂模式实验: (1) 参考讲义上的代码,利用简单工厂模式完成计算器应用程序: (2) 画出计算器程序简单 ...

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

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

  6. java工厂模式 uml_深入浅出设计模式-简单工厂模式

    模式定义 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式定义了一个创建对象的类,由这个类来封装实例化 ...

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

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

  8. 【设计模式-手写源码-附1】-简单工厂模式-基于魔兽争霸冰封王座

    1:主题拆解 ①依赖倒置原则-SimpleFactory ②简单工厂+ 配置文件=可配置 ③简单工厂+ 配置文件+反射=可配置可扩展 ④简单工厂升级IOC控制反转 2:基本介绍 ①学习设计模式的套路: ...

  9. 编写Java程序,用户在网上购买商品(good),当用户买了一本书(book)、一顶帽子(hat)或者买了一双鞋子(shoe),卖家就会通过物流将商品邮寄给用户,使用简单工厂模式模拟这一过程。

    查看本章节 查看作业目录 需求说明: 编写Java程序,用户在网上购买商品(good),当用户买了一本书(book).一顶帽子(hat)或者买了一双鞋子(shoe),卖家就会通过物流将商品邮寄给用户, ...

最新文章

  1. odoo10 工作流、安全机制、向导
  2. oracle数据字典表与视图
  3. 对B样条的理解和整理
  4. 我想做一个课程表系统利用PHP+MYSQL+HTML实现课表的展示,但是不知道如何实现
  5. php array_search多条件,php使用array_search与array_column函数实现二维数组内元素查找...
  6. WPF里面制作圆角文本框
  7. No HttpMessageConverter for com.ysd.entity.Users
  8. 如何使用Git Pull覆盖本地文件
  9. AutoIT:界面与自动化操作结合来简化日常劳动: .Net Reactor验证License,设置License,创建License,截图AutoIt自动化实现。(七)...
  10. 程序员的那些搞笑牛逼注释
  11. 关于被3个搞物理的“颠覆”了且数学天才陶哲轩“开始压根不相信”的数学常识的算法实现与理解
  12. 今日科技联播:美股暴跌引全球股市崩盘;腾讯跌出全球市值前十
  13. vue element 单张图片上传,删除,预览
  14. 幻灯片无缝滑动(无需重新设置下标)
  15. python class tynu()_Task02-BaseLine.ipynb
  16. [书目20141024]王正良硬笔书法教学
  17. mysql无法启动(centos7):systemctl status mysqld.service:Can‘t create/write to file
  18. 最新!互联网大厂各职级薪资对应关系图(2020年初)
  19. 联想x1carbon更换电池_联想_ThinkPad|ThinkCentre|ThinkStation服务与驱动下载_常见问题...
  20. opensuse安装pps for linux

热门文章

  1. [YTU]_2907(类重载实现矩阵加法)
  2. android grideview 图片png透明,Android完美解决GridView异步加载图片和加载大量图片时出现Out Of Memory问题...
  3. [笔记]filter,空字符,0,None都是False应用
  4. Java复习(四)类的重用
  5. SecureCR 改变背景色和文字颜色
  6. 【Git+Docker】Docker初期学习认识和安装配置详解
  7. eclipse ide for java ee developers与eclipse ide for java developers有什么区别
  8. 关于幸福的开发(搞笑版)
  9. Karush-Kuhn-Tucker 最优化条件 (KKT 条件)(转载)
  10. Linux dmesg 命令学习