JAVA事件机制(二)

        上一篇文章我们分析了一下观察者模式,本篇文章我们将参照观察者模式来看下JAVA事件机制。

        java事件机制包括三个部分:事件源、事件监听器(EventListener)、事件(EventObject),前两者分别对应被观察者对象和观察者对象;

  1. 事件源同被观察者对象一样需要容器来存放监听器,同时提供注册监听器和通知监听器的方法
    package com.appleseed.event;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 事件源(被观察者对象)
     * @author wangbo
     */
    public class DataContainer {
    
    	//监听器(观察者)容器
    	private List<AddDataEventListener> list = new ArrayList<AddDataEventListener>();
    	
    	//通知所有监听器(观察者)
    	private void notifyObservers() {
    		for (AddDataEventListener listener : list) {
    			listener.doNotify(new AddDataEvent(this));
    		}
    	}
    
    	//注册监听器(观察者)
    	public void registerObserver(AddDataEventListener listener) {
    		list.add(listener);
    	}
    
    	//模拟增加数据动作
    	public void dataAdded(){
    		notifyObservers();
    	}
    }
    

  2. 事件监听器需要实现EventListener接口,但查看EventListener接口源码会发现其中并没有方法,这说明它只是一个标签接口。此处我们只是简单的实现它,真正应用中可能会需要自定义接口增加自己的方法然后继承EventListener,例如:ChangeListener、ActionListener
    package com.appleseed.event;
    
    import java.util.EventListener;
    import java.util.EventObject;
    
    /**
     * 事件监听器(观察者对象),监听数据增加时发生的事件
     * @author wangbo
     */
    public class AddDataEventListener implements EventListener {
    	
    	//事件发生时调用的方法,可根据需要重写
    	public void doNotify(EventObject event) {
    		System.out.println("默认操作--事件源:"+event.getSource().toString());
    	}
    }
    

  3. 事件并不是观察者模式必需的,但在JAVA事件机制中却不可缺少,它可以看做传递数据的桥梁。事件需要继承EventObject,EventObject提供存放事件源,另外可以自己拓展,增加需要传递的数据
    package com.appleseed.event;
    
    import java.util.EventObject;
    
    /**
     * 数据增加事件,可以记录事件发生的时间等参数数据
     * @author wangbo
     */
    public class AddDataEvent extends EventObject {
    
    	private static final long serialVersionUID = 3091766606373623182L;
    
    	public AddDataEvent(Object source) {
    		super(source);
    	}
    }
    

  4. 使用时可重写事件监听器的方法,以应对业务需要
    package com.appleseed.event;
    
    import java.util.EventListener;
    import java.util.EventObject;
    
    /**
     * 事件监听器(观察者对象),监听数据增加时发生的事件
     * @author wangbo
     */
    public class AddDataEventListener implements EventListener {
    	
    	//事件发生时调用的方法,可根据需要重写
    	public void doNotify(EventObject event) {
    		System.out.println("默认操作--事件源:"+event.getSource().toString());
    	}
    }
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值