俊星的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)  編輯  收藏 所屬分類: 代碼庫

          主站蜘蛛池模板: 林西县| 深泽县| 理塘县| 秦皇岛市| 曲靖市| 龙岩市| 长沙市| 江华| 衢州市| 察哈| 松江区| 遵义市| 四川省| 乌兰察布市| 舞阳县| 邵阳县| 兰考县| 东阿县| 马关县| 四会市| 浙江省| 赤城县| 格尔木市| 德令哈市| 韶山市| 嘉善县| 江安县| 濮阳县| 柞水县| 宁阳县| 永嘉县| 巫山县| 基隆市| 山西省| 大兴区| 通城县| 阜康市| 建始县| 剑河县| 呼图壁县| 鹤山市|