Listener与Adapter比较区别

 监听器和适配器是Java图形用户界面(GUI,Graphics User interface)设计的抽象窗口工具集(AWT,Abstract Window Toolkit)的两个重要概念,他们都在java.awt包中。JDK1.1引入了委托事件模型,监听器和适配器就是这一模型的具体实现,所以理解他们就变得非常重要,初学者可能对于这两个概念有点陌生,为了节省他们看长编大论再自己总结的时间,我在这里就把自己的理解写出来,抛砖引玉。

1.委托事件模型
   要理解监听器和适配器,那么一定要了解委托事件模型,它区别于层次事件模型(JDK1.1以前的Java标准),根据不同的用户操作,产生不同的事件(Event类),并为每个事件类定义了事件对象的接受和处理方法,这些方法都包括在我们的监听器(Listener Interfance)里面,我们注册相应的事件监听程序后,就可以接受事件对象,实现相应的方法。

2.监听器和适配器是什么?
    如果一个类里声明了抽象方法,那么它也必须声明为抽象的。换句话说,包含有抽象方法的类就是抽象类。
    如果一个类里面的方法都是抽象的,那么它就是一个接口,也就是说,接口是一种特殊的抽象类。(当然,抽象类跟接口是有区别的,本文并不深入讨论这个问题)
   事件的监听程序(Listener)是接口中的一个未实现的方法。
   很明显,监听器实质上就是一个接口(Interface)。
   适配器(Adapter)是跟监听器一一对应的类。它实现了对应监听器中的所有方法,但都是空方法。注意:适配器是一个抽象类(abstract class)

3.适配器和监听器的使用
    在实际使用中,适配器只是作为方便程序员编程的一个手段,一般情况下程序员都要重写适配器中某些需要的方法,以达到所要的功能,如果只是一个适配器,那么它什么也不干。
    当然你也完全可以不用适配器,自己把监听器里面的方法全写一遍,那么在功能上是没什么不同的。也就是说有两种完成的方式:
①需要注册监听程序的类实现接口(监听器),然后重写接口中的所有方法
②需要注册监听程序的类实现接口(监听器),然后继承适配器,再重写需要的方法

4.需要注意的地方
  Ⅰ 有些教材把事件监听程序(Listener)等同于监听器(Listener Interface),本人觉得它们应该是接口中的方法与接口的关系,另外也有人把监听器称为监听者。
    Ⅱ 监听器是接口,是需要实现(implements)的,适配器是抽象类,是需要继承(extends)的。而由于适配器已经实现了对应的监听器,故继承了适配器的类不用再声明实现对应的监听器,就可以注册对应的监听程序。
例如:public class Calc1 extends WindowAdapter implements ActionListener,ItemListener
      {
           Frame f;
           TextField tf1;
           Checkbox cb1;
            ……
            public void display()
            {
              ……
            tf1.addActionListener(this); //实现了ActionListener,故可以注册对应的ActionListener
            cb1.addItemListener(this); //实现了ItemListener,故可以注册对应ItemListener
            f.addWindowListener(this);    //继承了WindowAdapter,也可以注册对应的WindowListener
                  ……
             }

          ……
       }  

    Ⅲ 在实际使用中,由于Java只能单继承,对于接口和抽象类的选择就需慎重考虑,同样的一个类只能继承一个适配器,这也意味着其它的监听程序就需要手动实现,在优秀的编辑工具下这个工作量也许并不大,但也可以尝试把监听器交给别的类(比如类A)来实现,而类A就可以继承对应的适配器,这才是Java的单继承多接口机制的思想所在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值