美文网首页
2019-02-26 Java监听器简单练手示例

2019-02-26 Java监听器简单练手示例

作者: 攻城狮哦哦也 | 来源:发表于2019-02-26 11:14 被阅读0次

业务逻辑:孩子在吃饭前需要洗手,所以我们需要监听孩子的吃饭事件,当吃饭事件发生时,执行监听事件

1 孩子类

package listen;

import java.util.ArrayList;
import java.util.List;

public class Child {
    private String name;
    private List<Listener> listeners = new ArrayList<Listener>();
    
    //为该对象注册监听
    public void addListener(Listener listener) {
        this.listeners.add(listener);
    }



    public void eat() {
        //遍历监听集合
        for(Listener listener : listeners) {
            //对相应的监听执行不同的逻辑
            if(listener instanceof RemaindWashListener) {
                RemaindWashListener washingHandsListener = (RemaindWashListener)listener;
                //调用监听中的处理方法
                washingHandsListener.fireAfterEventInvoked(new WashingHandsEvent(this,"洗手"));
            }
        }
        System.out.println("吃饭");
    }
}

2 事件类

package listen;

import java.util.EventObject;

public class Event extends EventObject{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    /**
     * 
     * source 为事件源对象,在此示例中就是Child对象
     * @param source
     */
    public Event(Object source) {
        super(source);
    }


}

3 事件接口实现类

package listen;

public class WashingHandsEvent extends Event{
    private String eventName; 
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    
    public WashingHandsEvent(Object source,String eventName) {
        super(source);
        this.eventName = eventName;
    }
 
    public String getEventName() {
        return eventName;
    }
 
    public void setEventName(String eventName) {
        this.eventName = eventName;
    }

}

4 监听器接口

package listen;

import java.util.EventListener;

public interface Listener extends EventListener{
    public void fireAfterEventInvoked(Event event);
}

5 监听器实现

package listen;

public interface RemaindWashListener extends Listener{
    /**
     * 监听器实现类型
     * 1、可以将方法的具体实现写在改实现类中,
     * 2、也可以将该类定义为接口,在调用的时候再用内部类的方式来写具体实现。(对于调用者实现比较灵活)
     * 本示例用的是第二种
     */
    public void fireAfterEventInvoked(Event event); /*{
        WashingHandsEvent WashingHandsEvent = (WashingHandsEvent)event;
        System.out.println("饭前需要"+WashingHandsEvent.getEventName());
        
    }
*/
}

6 main测试类

package listen;

import java.util.ArrayList;
import java.util.List;

public class TestMain {

    public static void main(String[] args) {
        Child child = new Child();
        //在被监听对象中注册监听
        child.addListener(new RemaindWashListener() {//实现监听类抽象接口和方法具体实现
            @Override
            public void fireAfterEventInvoked(Event event) {
                System.out.println("吃饭前洗手");
            }
        });
        child.eat();

    }

}

7 演示结果

图片.png

相关文章

网友评论

      本文标题:2019-02-26 Java监听器简单练手示例

      本文链接:https://www.haomeiwen.com/subject/zlzoyqtx.html