Java自訂事件

來源:互聯網
上載者:User

開始看到java類中有的addListener()方法,感覺就是一個方法,很簡單啊,後來自己想寫事件,才發覺這裡頭還是有些學問的。
   MyChangeEvent.java     事件類別,繼承了java.util.EventObject
   MyChangeListener.java  監聽介面,繼承了java.util.EventListener
   MyClass.java           實現了事件的處理機制
   MyEventTest.java       Junit的測試

/*
 * Created on Nov 26, 2004 11:25:14 PM
 *
 * MyChangeEvent.java
 **/
package org.yz21.study.event;

import java.util.EventObject;

/**
 * @author violin
 *
 *  Copyright www.yz21.org 2003-2004
 */
public class MyChangeEvent extends EventObject {
 
 private String myname;

 /**
  * @param source
  */
 public MyChangeEvent(Object source) {
  super(source);
 }
 
 /*
  * @param source myname
  */
 public MyChangeEvent(Object source,String myname) {
  super(source);
  this.myname = myname;
 }
 
 /*
  * @return String
  */
 public String getMyname() {
  return myname;
 }

}

/*
 * Created on Nov 26, 2004 11:27:55 PM
 *
 * MyChangeListener.java
 **/
package org.yz21.study.event;

import java.util.EventListener;

/**
 * @author violin
 *
 *  Copyright www.yz21.org 2003-2004
 */
public interface MyChangeListener extends EventListener {
 /*
  * @param event
  */
 public void MyChanged(MyChangeEvent event);

}

/*
 * Created on Nov 26, 2004 11:32:01 PM
 *
 * MyClass.java
 **/
package org.yz21.study.event;

import java.util.Iterator;
import java.util.Vector;

/**
 * @author violin
 *
 *  Copyright www.yz21.org 2003-2004
 */
public class MyClass {

 private String name = "2004-9-27";
 private static Vector myChangeListeners = new Vector();

 /**
  *
  */
 public MyClass() {
  super();
 }

 /*
  * @param myname
  */
 public void testMyEvent(String myname) {
  this.name = myname;
  notifyMyChangeListeners();
 }
 
 /*
  * @param listener   add a listener;
  */
 public void addMyChangeListener(MyChangeListener listener) {
  myChangeListeners.add(listener);
 }
 
 /*
  * @param listener   remove a listener;
  */
 public void removeMyChangeListener(MyChangeListener listener) {
  myChangeListeners.remove(listener);
 }
 
 /*
  * notify all listeners;
  */
 private  void notifyMyChangeListeners() {
  MyChangeEvent event = new MyChangeEvent(MyClass.class, name);
  Iterator iterator = ((Vector) myChangeListeners.clone()).iterator();

  while (iterator.hasNext()) {
   MyChangeListener listener = (MyChangeListener) iterator.next();
   listener.MyChanged(event);
  }
 }
}

/*
 * Created on Nov 26, 2004 11:47:04 PM
 *
 * MyEventTest.java
 **/
package org.yz21.study.event;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

/**
 * @author violin
 *
 *  Copyright www.yz21.org 2003-2004
 */
public class MyEventTest extends TestCase implements MyChangeListener {
 
 private MyClass myclass;
 private String testname;

 /**
  * Constructor for MyEventTest.
  * @param arg0
  */
 public MyEventTest(String arg0) {
  super(arg0);
 }

 public static void main(String[] args) {
  junit.textui.TestRunner.run(MyEventTest.class);
 }

 /*
  * @see TestCase#setUp()
  */
 protected void setUp() throws Exception {
  myclass = new MyClass();
  myclass.addMyChangeListener(this);
  this.testname = "yz21.org";
 }

 /*
  * @see TestCase#tearDown()
  */
 protected void tearDown() throws Exception {
  myclass = null;
 }
 
 /*
  * @see TestCase#suite()
  */
 public static Test suite() {
  return new TestSuite(MyEventTest.class); //以類為參數
 }
 
 public void MyChanged(MyChangeEvent event) {
  this.testname = event.getMyname();
 }
 
 public void testMyEvent() {
  myclass.testMyEvent("www.yz21.org");
  this.assertEquals("測試事件","www.yz21.org",testname);
 }
}

參考資料:
          1、java docs
          2、Apache Jmeter
          3、Junit docs

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.