Java 事件監聽
阿新 • • 發佈:2019-01-25
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(); } }
輸出結果:
轉自: