今天研究Java自定义事件,貌似就是监听者模式,但为什么要继承实现那些官方的接口和类呢?
具体来说我有以下疑惑
1、自定义的Listener为什么要实现 java.util.EventListener 接口? 不实现也没问题啊
2、自定义Event为什么要继承 java.util.EventObject ? 不集成也挺好啊
3、监听器列表的集合为什么是javax.swing.event.EventListenerList 而不用List之类? 官方api上说:
此类的主要优点是,在没有侦听器的情况下,它相对廉价一些,它在单个地方为事件侦听器提供序列化,同时还提供某种程度的 MT 安全(在正确使用时)。 
我没有真正看懂,请高手指教。
下面是从官方api上考下来的例子:
-------------------------------------------------------------------------
 EventListenerList listenerList = new EventListenerList();
 FooEvent fooEvent = null; public void addFooListener(FooListener l) {
     listenerList.add(FooListener.class, l);
 } public void removeFooListener(FooListener l) {
     listenerList.remove(FooListener.class, l);
 }
 // Notify all listeners that have registered interest for
 // notification on this event type.  The event instance 
 // is lazily created using the parameters passed into 
 // the fire method. protected void fireFooXXX() {
     // Guaranteed to return a non-null array
     Object[] listeners = listenerList.getListenerList();
     // Process the listeners last to first, notifying
     // those that are interested in this event
     for (int i = listeners.length-2; i>=0; i-=2) {
         if (listeners[i]==FooListener.class) {
             // Lazily create the event:
             if (fooEvent == null)
                 fooEvent = new FooEvent(this);
             ((FooListener)listeners[i+1]).fooXXX(fooEvent);
         }
     }
 }
为什么要用这个EventListenerList搞得这么复杂?  尤其是protected void fireFooXXX()这个方法中的for循环,乍一看头疼,用List多干脆呀?这些疑问总有合理的解释,既然别人这样做,肯定有目的,希望大侠能从本质上说说看...