基于简单工厂模式的计算器程序
生活随笔
收集整理的這篇文章主要介紹了
基于简单工厂模式的计算器程序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這個計算器是我學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
總結
以上是生活随笔為你收集整理的基于简单工厂模式的计算器程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TableLayoutPanel
- 下一篇: python中统计列表各个元素的个数