設計模式_EventObject和EventListener


一.事件機制基本概念

  java中的事件機制的參與者有3種角色:

  1.event object:事件狀態對象,用於listener的相應的方法之中,作為參數,一般存在與listerner的方法之中

  2.event listener:對每個明確的事件的發生,都相應地定義一個明確的Java方法。這些方法都集中定義在事件監聽者(EventListener)接口中,
   這個接口要繼承 java.util.EventListener。 實現了事件監聽者接口中一些或全部方法的類就是事件監聽者。

  3.event source:具體的事件源,比如說,你點擊一個button,那么button就是event source,要想使button對某些事件進行響應,你就需要注冊特定的listener。

二.舉例 Door1
   屬性 name 和status 改變,被監管
  1.Door1

public class Door1 {
    private String state = "";
    private String name = "";
    private DoorStateListener stateListener;
    private DoorNameListener  nameListener;
    
    public void setState(String newValue) {
        if (state != newValue) {
            state = newValue;
            if (stateListener != null){
//注意參數傳遞 Door1Event event
= new Door1Event(this, "state",newValue); stateListener.doorEvent(event); } } } public void setName(String newValue) { if (name != newValue) { name = newValue; if (nameListener != null){ Door1Event event = new Door1Event(this,"name", newValue); nameListener.doorEvent(event); } } } public void setStateListener(DoorStateListener stateListener) { this.stateListener = stateListener; } public void setNameListener(DoorNameListener nameListener) { this.nameListener = nameListener; } public String getState() { return state; } public String getName() { return name; } }

2.數據傳遞對象  Door1Event

import java.util.EventObject;

public class Door1Event extends EventObject {
    private static final long serialVersionUID = 6496098798146410884L;
    
    private final String key ; 
    private final String value  ; 
    
    public Door1Event(Object source,String key , String value) {
        super(source);
        this.key = key;
        this.value = value;
    }

    public String getValue() {
        return value;
    }
public String getKey() { return key; } }

3.被監管對象

    Door1StateObserver

class DoorStateListener implements EventListener {
    public void doorEvent(Door1Event event) {
        if (event.getValue() != null && event.getValue().equals("open")) {
            System.out.println("門1打開");
        } else {
            System.out.println("門1關閉");
        }
    }
}

    Door1NameObserver

class DoorNameListener implements EventListener {
    public void doorEvent(Door1Event event) {
        Door1 door = (Door1) event.getSource();
        System.out.println("I got a new name,named \"" + door.getName() + "\"");
    }
}

4 .Door1Test

public class Door1Test {
    public static void main(String[] args) {

        Door1 door = new Door1();
        door.setStateListener(new DoorStateListener());   
        door.setNameListener (new DoorNameListener());    
        // 開門
        door.setState("open");
        System.out.println("我已經進來了");
        // 關門
        door.setState("close");
        // 改名
        door.setName("dengzy"); } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM