简单的实际驱动模型,就是监听文件发生变化,将添加的数据写入到数据库中,具体细节没有实现,仅仅实现框架
事件源:
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");
}
}