俊星的BLOG

          JAVA MAIL之簡單事件

          JAVA MAIL 中包含了連接、計數等事件機制,下面的對連接事件的一個簡單實現:
          1、事件基類:
          package myevent;

          import java.util.EventObject;

          public abstract class MyMailEvent extends EventObject {
              
          private static final long serialVersionUID = 2183013741510840197L;

              
          public MyMailEvent(Object source) {
                  
          super(source);
              }

              
              
          public abstract void dispatch(Object listener);
          }


          2、連接事件類:
          package myevent;

          public class MyConnEvent extends MyMailEvent {
              
          public static final int OPENED = 1;
              
          public static final int CLOSED = 2;
              
          protected int type;
              
          private static final long serialVersionUID = 6177016117289759191L;

              
          public MyConnEvent(Object source, int type) {
                  
          super(source);
                  
          this.type = type;
              }


              @Override
              
          public void dispatch(Object listener) {
                  
          switch (type) {
                  
          case OPENED:
                      ((MyConnListener) listener).opened(
          this);
                      
          break;
                  
          case CLOSED:
                      ((MyConnListener) listener).closed(
          this);
                  
          default:
                      
          break;
                  }


              }


              
          public int getType() {
                  
          return type;
              }

          }


          3、連接事件偵聽類:
          package myevent;

          import java.util.EventListener;

          public interface MyConnListener extends EventListener {
              
          public void opened(MyConnEvent e);

              
          public void closed(MyConnEvent e);
          }


          4、連接事件適配器類:
          package myevent;

          /** 采用Adapter的為了使用時只需重載部分方法 */
          public abstract class MyConnAdapter implements MyConnListener {
              
          public void opened(MyConnEvent e) {

              }


              
          public void closed(MyConnEvent e){
                  
              }

          }


          5、測試:
          package myevent;

          import java.util.ArrayList;
          import java.util.List;

          public class EventTest {
              
          private List<MyConnListener> conns = new ArrayList<MyConnListener>();

              
          public void addConnListener(MyConnListener lis) {
                  conns.add(lis);
              }


              
          public void notifyConn() {
                  List
          <MyMailEvent> list = new ArrayList<MyMailEvent>();
                  list.add(
          new MyConnEvent("source1", MyConnEvent.OPENED));
                  list.add(
          new MyConnEvent("source2", MyConnEvent.OPENED));
                  list.add(
          new MyConnEvent("source3", MyConnEvent.CLOSED));

                  
          for (MyMailEvent e : list) {
                      
          for (MyConnListener inst : conns) {
                          e.dispatch(inst);
                      }

                  }

              }


              
          public static void main(String[] args) {
                  EventTest test 
          = new EventTest();
                  
          // 只偵聽open事件
                  test.addConnListener(new MyConnAdapter() {
                      
          public void opened(MyConnEvent e) {
                          System.out.println(e.getSource() 
          + ":listener 1 after open");
                      }

                  }
          );
                  
          // 只偵聽close事件
                  test.addConnListener(new MyConnAdapter() {
                      
          public void closed(MyConnEvent e) {
                          System.out.println(e.getSource() 
          + ":listener 2 after close");
                      }

                  }
          );
                  
          // open、close都偵聽
                  test.addConnListener(new MyConnAdapter() {
                      
          public void opened(MyConnEvent e) {
                          System.out.println(e.getSource() 
          + ":listener 3 after open");
                      }


                      
          public void closed(MyConnEvent e) {
                          System.out.println(e.getSource() 
          + ":listener 3 after close");
                      }

                  }
          );
                  test.notifyConn();
              }

          }

          輸出:
          source1:listener 1 after open
          source1:listener 
          3 after open
          source2:listener 
          1 after open
          source2:listener 
          3 after open
          source3:listener 
          2 after close
          source3:listener 
          3 after close

          6、點擊下載代碼

          posted on 2009-04-25 13:13 俊星 閱讀(217) 評論(0)  編輯  收藏 所屬分類: 代碼庫

          主站蜘蛛池模板: 嵩明县| 古田县| 黎川县| 余干县| 扬州市| 大冶市| 曲周县| 盐亭县| 新泰市| 隆林| 泾阳县| 清流县| 东兴市| 固原市| 临西县| 新宾| 江山市| 安徽省| 星座| 拜城县| 峨眉山市| 三穗县| 静宁县| 连州市| 应城市| 磴口县| 阜康市| 荆门市| 农安县| 广元市| 金乡县| 托克托县| 晋宁县| 准格尔旗| 阳泉市| 黔西县| 行唐县| 四平市| 呼玛县| 三门峡市| 武威市|