可以模仿swing的做法,打开JavaDoc,查javax.swing.event.EventListenerList
里面有详细的步骤介绍可供参考。

解决方案 »

  1.   

    public class EventListenerList
    extends Object
    implements Serializable
    A class that holds a list of EventListeners. A single instance can be used to hold all listeners (of all types) for the instance using the list. It is the responsiblity of the class using the EventListenerList to provide type-safe API (preferably conforming to the JavaBeans spec) and methods which dispatch event notification methods to appropriate Event Listeners on the list. The main benefits that this class provides are that it is relatively cheap in the case of no listeners, and it provides serialization for event-listener lists in a single place, as well as a degree of MT safety (when used correctly). Usage example: Say one is defining a class that sends out FooEvents, and one wants to allow users of the class to register FooListeners and receive notification when FooEvents occur. The following should be added to the class definition:  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);
             }
         }
     }
     
    foo should be changed to the appropriate name, and fireFooXxx to the appropriate method name. One fire method should exist for each notification method in the FooListener interface.
      

  2.   

    使用interface 就可以了!你看看 swing 或 awt 的事件处理机制就找到了
      

  3.   

    c#里面的delegate基本上就是和java里面的Adapter一模一样
    呵呵
      

  4.   

    看看《设计模式》,Observer模式
      

  5.   

    jFresH_MaN(TM)大哥这句话指的是思想基本上一模一样吗?形式上C#的delegate更像C的函数指针啊。
      

  6.   

    哇,楼上的千万别这么称呼我,我可不是大哥
    呵呵因为delegate就是把对函数的调用交给了系统,adapter也是这样的
    可以说是思想一样吧
    我们应该知道c#和java是很象的