java使用工厂模式编写计算器(swing界面)

使用工厂模式编写计算器

首先我们先有算法这个接口

1:算法接口

package com.v4;
public class Arithmetic {
    public int count(String str){
        return 0;
    }
}

2:算法工厂类

package com.v4;
public class ArithmeticFactory {
public static Arithmetic getArith(String str){
        Arithmetic ari = null;
        if(str.indexOf("+") != -1){
            ari = new Add();
        }else if(str.indexOf("-") != -1){
            ari = new Minus();
        }else if(str.indexOf("*") != -1){
            ari = new Multiply();
        }else if(str.indexOf("/") != -1){
            ari = new Divide();
        }
         return ari;
    }
}

3:相加类

package com.v4;
public class Add extends Arithmetic{
    @Override
    public int count(String str) {
        String[] strs = str.split("\\+");
        return Integer.parseInt(strs[0])+Integer.parseInt(strs[1]);
    }
}

4:相减类

package com.v4;
public class Minus extends Arithmetic{
    @Override
    public int count(String str) {
        // TODO Auto-generated method stub
        String[] strs = str.split("-");
        return Integer.parseInt(strs[0])-Integer.parseInt(strs[1]);
    }

5:相乘类

package com.v4;
public class Multiply extends Arithmetic{
    @Override
    public int count(String str) {
        // TODO Auto-generated method stub
        String[] strs = str.split("\\*");
        return Integer.parseInt(strs[0])*Integer.parseInt(strs[1]);
    }
}

6:相除类

package com.v4;
public class Divide extends Arithmetic{
   @Override
    public int count(String str) {
        // TODO Auto-generated method stub
        String[] strs = str.split("/");
    return Integer.parseInt(strs[0])/Integer.parseInt(strs[1]);
    }
}

7:swing页面类



package com.v4;
import java.util.Scanner;package com.v4;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.JLabel;
import java.awt.event.FocusAdapter;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class Calculator extends JFrame implements ActionListener {

    private JPanel contentPane;
    private JTextField textField;
    JButton button_1;
    JButton button_2;
    JButton button_3;
    JButton button_4;
    JButton button_5;
    JButton button_6;
    JButton button_7;
    JButton button_8;
    JButton button_9;
    JButton button_0;
    JButton button_add;
    JButton button_minus;
    JButton button_mulptily;
    JButton button_divide;
    JButton button_clear;
    JButton button_equal;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Calculator frame = new Calculator();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Calculator() {
        setBackground(Color.WHITE);
        setTitle("计算器");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.CENTER);
        panel.setLayout(null);

        textField = new JTextField();
        textField.setBounds(12, 12, 412, 36);
        textField.setHorizontalAlignment(SwingConstants.RIGHT);
        panel.add(textField);
        textField.setColumns(10);

        button_4 = new JButton("4");
        button_4.setBounds(12, 103, 85, 31);
        button_4.addActionListener(this);
        panel.add(button_4);

        button_5 = new JButton("5");
        button_5.setBounds(120, 103, 85, 31);
        button_5.addActionListener(this);
        panel.add(button_5);

        button_1 = new JButton("1");
        button_1.setBounds(12, 60, 85, 31);
        button_1.addActionListener(this);
        panel.add(button_1);

        button_6 = new JButton("6");
        button_6.setBounds(231, 103, 85, 31);
        button_6.addActionListener(this);
        panel.add(button_6);

        button_7 = new JButton("7");
        button_7.setBounds(12, 146, 85, 31);
        button_7.addActionListener(this);
        panel.add(button_7);

        button_8 = new JButton("8");
        button_8.setBounds(120, 146, 85, 31);
        button_8.addActionListener(this);
        panel.add(button_8);

        button_9 = new JButton("9");
        button_9.setBounds(231, 146, 85, 31);
        button_9.addActionListener(this);
        panel.add(button_9);

        button_2 = new JButton("2");
        button_2.setBounds(120, 60, 85, 31);
        button_2.addActionListener(this);
        panel.add(button_2);

        button_3 = new JButton("3");
        button_3.setBounds(231, 60, 85, 31);
        button_3.addActionListener(this);
        panel.add(button_3);

        button_0 = new JButton("0");
        button_0.setBounds(12, 189, 85, 31);
        button_0.addActionListener(this);
        panel.add(button_0);

        button_clear = new JButton("清空");
        button_clear.setBounds(120, 189, 85, 31);
        button_clear.addActionListener(this);
        panel.add(button_clear);

        button_add = new JButton("+");
        button_add.setBounds(339, 60, 85, 31);
        button_add.addActionListener(this);
        panel.add(button_add);

        button_minus = new JButton("-");
        button_minus.setBounds(339, 103, 85, 31);
        button_minus.addActionListener(this);
        panel.add(button_minus);

        button_mulptily = new JButton("*");
        button_mulptily.setBounds(339, 146, 85, 31);
        button_mulptily.addActionListener(this);
        panel.add(button_mulptily);

        button_divide = new JButton("/");
        button_divide.setBounds(339, 189, 85, 31);
        button_divide.addActionListener(this);
        panel.add(button_divide);

        button_equal = new JButton("=");
        button_equal.setBounds(231, 189, 85, 31);
        button_equal.addActionListener(this);
        panel.add(button_equal);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub

        if (e.getSource() == button_equal) {
            Arithmetic ari = ArithmeticFactory.getArith(textField.getText());
            int num = ari.count(textField.getText());
            textField.setText("" + num);
        } else if (e.getSource() == button_clear) {
            textField.setText("");
        } else {
            textField.setText(textField.getText() + e.getActionCommand());
        }
    }

}

效果图:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/u012843355/article/details/78394626