事件驱动模型简单实现学习

简单的实际驱动模型,就是监听文件发生变化,将添加的数据写入到数据库中,具体细节没有实现,仅仅实现框架

事件源:

package event1;




import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 文件修改
 */
public class FileChange {

    //监听器列表
    Set<FileChangeListener> listenerList = new HashSet<>();

    FileEvent fileEvent ;

    ExecutorService service = Executors.newFixedThreadPool(10);

    public void insertData(String data){
        System.out.println("向文件中写入数据:"+ data);
        fileEvent = new FileEvent(this);
        fileEvent.setData(data);
        //设置被观察发生改变的状态,并通知所有监听器
        triggerEvent();
    }

    //添加监听器
    public void addWriterListener(FileChangeListener listener){
        listenerList.add(listener);
    }

    //删除监听器
    public void removeWriterListener(FileChangeListener listener){
        listenerList.remove(listener);
    }

    //触发事件通知所有监听器
    private void triggerEvent(){
        for (FileChangeListener listener : listenerList) {
            listener.addData(fileEvent);
            service.execute(listener);
        }
    }
}

发现者:

package event1;



/**
 * 发现文件修改类
 */
public class Finder implements FileChangeListener{


    private FileEvent fileEvent;

    @Override
    public void addData(FileEvent fileEvent) {
        this.fileEvent = fileEvent;
        System.out.println("监听器 :文件添加了一条数据");
    }

    @Override
    public void run() {
        System.out.println("将该数据写入数据库中: " + fileEvent.getData());
    }


}

监听器:

package event1;



import java.util.EventListener;

/**
 * 文件修改监听类
 */
interface FileChangeListener extends EventListener,Runnable {

    /**
     * 监听动作
     * @param fileEvent
     */
    void addData(FileEvent fileEvent);

}

事件:

package event1;



import java.util.EventObject;

/**
 * 文件事件
 */
public class FileEvent extends EventObject {

    private String data;

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    /**
     * Constructs a prototypical Event.
     *
     * @param source The object on which the Event initially occurred.
     * @throws IllegalArgumentException if source is null.
     */
    public FileEvent(Object source) {
        super(source);
    }


    /**
     * 获取事件源
     * @return
     */
    public FileEvent get(){
        return (FileEvent) super.source;
    }
}

测试类:

package event1;


public class Main {

    public static void main(String[] args) {
        //创建一个文件修改的事件源
        FileChange change = new FileChange();
        //创建一个发现者
        Finder finder =new Finder();
        //把发现者注册到监听器中
        change.addWriterListener(finder);
        //触发文件添加数据操作
        change.insertData("aaa");
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值