1. 程式人生 > >Java 事件監聽

Java 事件監聽

Person.class

//事件源
public class Person {
	  /**
	  * @Field: listener
	  *     在Person類中定義一個PersonListener變數來記住傳遞進來的監聽器
	  */
	  private PersonListener listener;
	 
	  /**
	  * @Method: eat
	  * @Description: 設計Person的行為:吃
	  *
	  */
	  public void eat() {
	    if (listener != null) {
	      /**
	       * 呼叫監聽器的doeat方法監聽Person類物件eat(吃)這個動作,將事件物件Event傳遞給doeat方法,
	       * 事件物件封裝了事件源,new Event(this)中的this代表的就是事件源
	       */
	      listener.doeat(new Event(this));
	    }
	  }
	 
	  /**
	  * @Method: run
	  * @Description: 設計Person的行為:跑
	  *
	  */
	  public void run() {
	    if (listener != null) {
	      /**
	       * 呼叫監聽器的dorun方法監聽Person類物件run(跑)這個動作,將事件物件Event傳遞給doeat方法,
	       * 事件物件封裝了事件源,new Event(this)中的this代表的就是事件源
	       */
	      listener.dorun(new Event(this));
	    }
	  }
	 
	  /**
	  * @Method: registerListener
	  * @Description: 這個方法是用來註冊對Person類物件的行為進行監聽的監聽器
	  *
	  * @param listener
	  */
	  public void registerListener(PersonListener listener) {
	    this.listener = listener;
	  }
	}
	 
	/**
	* @ClassName: PersonListener(事件監聽器)
	* @Description: 設計Person類(事件源)的監聽器介面
	*
	*/
	interface PersonListener {
	 
	  /**
	  * @Method: doeat
	  * @Description: 這個方法是用來監聽Person物件eat(吃)這個行為動作,
	  *         當實現類實現doeat方法時就可以監聽到Person類物件eat(吃)這個動作
	  *
	  * @param e
	  */
	  void doeat(Event e);
	 
	  /**
	  * @Method: dorun
	  * @Description: 這個方法是用來監聽Person物件run(跑)這個行為動作,
	  *         當實現類實現dorun方法時就可以監聽到Person類物件run(跑)這個動作
	  *
	  * @param e
	  */
	  void dorun(Event e);
	 
	}
	 
	/**
	* @ClassName: Event(事件物件)
	* @Description:設計事件類,用來封裝事件源
	*
	*/
	class Event {
	 
	  /**
	  * @Field: source
	  *     事件源(Person就是事件源)
	  */
	  private Person source;
	 
	  public Event() {
	 
	  }
	 
	  public Event(Person source) {
	    this.source = source;
	  }
	 
	  public Person getSource() {
	    return source;
	  }
	 
	  public void setSource(Person source) {
	    this.source = source;
	  }
}

PersonTest.class

public class PersonTest {
	 public static void main(String[] args) {
		    Person p = new Person();
		    //註冊監聽p物件行為的監聽器
		    p.registerListener(new PersonListener() {
		      //監聽p吃東西這個行為
		      public void doeat(Event e) {
		        Person p = e.getSource();
		        System.out.println(p + "在吃東西");
		      }
		      //監聽p跑步這個行為
		      public void dorun(Event e) {
		        Person p = e.getSource();
		        System.out.println(p + "在跑步");
		      }
		    });
		    //p在吃東西
		    p.eat();
		    //p在跑步
		    p.run();
		  }

}

輸出結果:

轉自: