日期:2014-05-20  浏览次数:20705 次

百分请教关于event监听器的问题
对于一个按钮的事件(简单事件)的两种写法:
写法1:
Java code

class ButtonAction extends ActionListener{
    MainFrame mainFrame;

    public ButtonAction(MainFrame mainFrame){
        this.mainFrame = mainFrame;
    }


    void actionPerformed(ActionEvent e){
        mainFrame.doAction();
    }
}



写法2:
Java code

public class MainClass {
    public MainClass {
        button.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                doAction();
            }
        })
    }
}



请教这两种写法在效率,可读性上等各个方面的差异???(代码简写了,doAction是事件处理函数)

------解决方案--------------------
性能没有多大影响。放心

可读性当然第一种好了

如果时间处理简单的话,我习惯使用第二种。
第二种的优点是写法简单,可以使用外部的变量和方法。
缺点就是代码无法复用。

------解决方案--------------------
效率上并没有区别。


第二种方式是采用匿名类的方法,可读性最差,适用于非常简单的事件处理。

第一种方式合并了主类和事件处理类,较为常用,适用于整个程序并不太复杂的情况;且事件处理函数可以很容易的访问主类的各成员变量;所以很常见。

如果程序较为复杂,那么事件处理需要抽出来单独定义一个处理类,这样才不会让主类的代码过于冗长,影响阅读理解。
------解决方案--------------------
效率基本没差多少,可读性也没差多少,都很清晰。
第二种使用惹名内部类的方式,代码量比较少,如果只有一个button需要添加event用这种就可以。
如果有多个button需要添加,那就用第一种,方便调用。
------解决方案--------------------
就LZ这两段代码,效率和可读性都差别不大.
该说的LS都说了,匿名类适用于比较独立的处理,因为匿名类没法重用.