天天看点

java设计模式----模版模式+内部类+设计时间事件处理框架

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() ;

 }