Анонимные классы или одно ActionEvent в модели наблюдателя? - PullRequest
0 голосов
/ 10 февраля 2019

Рассмотрим JFrame с двумя кнопками:

setup 1:

один метод actionPerformed передается дочерним элементам, а способ его обработки основан на идентификаторе объекта, передающегособытие.

import javx.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;

public class View extends JFrame implements ActionListener{
    private JButton btn1;
    private JButton btn2;
    private JLabel lbl;

    public View(){
        btn1 = new JButton("hi");
        btn2 = new JButton("bye");
        setLayout(new GridBagLayout());
        GridBagConstraings gc = new GridBagConstraints();

        gc.gridx = 0;
        gc.gridy = 0;
        gc.weightx = 1;
        gc.weighty = 1;
        add(btn1,gc);

        gc.gridx = 1;
        gc.gridy = 0;
        gc.weightx = 1;
        gc.weighty = 1;
        add(btn2,gc);

        btn1.addActionListener(this);
        btn2.addActionListener(this);
    }
    @Override
    public void actionPerformed(ActionEvent e){
        JButton src = (JButton)e.getSource();
        if(src == btn1){
            //do this
        }else{
            //do that
        }
    }
}

Настройка 2:

Каждому отдельному модулю передается экземпляр анонимного класса, который содержит собственную уникальную реализацию actionPerformed()

import javx.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;

public class View extends JFrame{
    private JButton btn1;
    private JButton btn2;
    private JLabel lbl;

    public View(){
        btn1 = new JButton("hi");
        btn2 = new JButton("bye");
        setLayout(new GridBagLayout());
        GridBagConstraings gc = new GridBagConstraints();

        gc.gridx = 0;
        gc.gridy = 0;
        gc.weightx = 1;
        gc.weighty = 1;
        add(btn1,gc);

        gc.gridx = 1;
        gc.gridy = 0;
        gc.weightx = 1;
        gc.weighty = 1;
        add(btn2,gc);

        btn1.addActionListener(new ActionListener(){
            //do this
        });
        btn2.addActionListener(new ActionListener(){
            //do that
        });
    }
}

Что быбыть причиной, по которой я должен выбрать один подход вместо другого?

...