import java.util.ArrayList;
import java.util.List;
/**
* 创建一个基于时间驱动的事件 以模板设计模式 +内部类 设计出事件处理的框架
* @author xiaowei
*/
//抽象事件类
abstract class Event
{
private long eventTime ; //事件发生
protected long delayTime ; //发生间隔据当前时间
Event(long time)
{
this.delayTime =time ;
eventTime=System.nanoTime()+delayTime*1000000; //这里与JDK写的不一致 这里1秒等于 10的9次方
}
public boolean ifActtion() //是否执行事件
{
return System.nanoTime()>=eventTime ;
abstract void action() ; //提供一个抽象方法 可以实现不同的行为
}
class TemplateController
{
private List<Event> el=new ArrayList<Event>() ; //事件集合
public void addEvent(Event e){
el.add(e) ;
}
public void start() //执行方法
{
while(el.size()>0)
{
for(Event tem:new ArrayList<Event>(el)){
if(tem.ifActtion()){
tem.action() ; //执行指定的方法
el.remove(tem) ; //删除执行完的事件
}
}
}
public class TemplateTest{
public static void main(String[]agrs){
TemplateController c=new TemplateController() ;
c.addEvent(new Event(3000){
@Override
void action() {
System.out.println("Event1执行");
System.out.println("3000毫秒的输出");
}
});
c.addEvent(new Event(1000){
System.out.println("Event2执行");
System.out.println("1000毫秒的输出");
c.addEvent(new Event(6000){
System.out.println("Event3执行");
System.out.println("6000毫秒的输出");
c.addEvent(new Event(5000){
System.out.println("Event4执行");
System.out.println("5000毫秒的输出");
c.start() ;
}