快速业务通道

从Java类库看设计模式(2) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
据,我希望它半个小时进行一次,等等等等。但是,我并不希望作为TaskSchedule的类 知道各个任务的细节内容,TaskSchedule应该只是知道Task本身,而对具体的实现任务的细 节并不理会。因而在这儿,我们就需要对TaskSchedule和Task进行解耦,将任务和具体的实 现分离出来,这不正是Command模式的用武之地吗?

图三:Command模式的应用例子

从Java类库看设计模式(2) - 编程入门网

程序清单:

//抽象的Task接口,作为回调的Command模式的主体 public interface Task {   public void taskPerform(); } //具体的实现了Task接口的子类,实现特定的操作。 public class BackupTask implements Task{   public void taskPerform(){    System.out.println("Backup Task has been performed");   } } //具体的实现了Task接口的子类,实现特定的操作。 public class ScanDiskTask implements Task{   public void taskPerform(){    System.out.println("ScanDisk Task has been performed");   } } //一个封装了Task的一个封装类,提供了一些与Task相关的内容,也可以把这些内容 //这儿不过为了突出Command模式而把它单另出来,实际上可以和Task合并。 public class TaskEntry {   private Task task;   private long timeInterval;   private long timeLastDone;   public Task getTask() {    return task;   }   public void setTask(Task task) {    this.task = task;   }   public void setTimeInterval(long timeInterval) {    this.timeInterval = timeInterval;   }   public long getTimeInterval() {    return timeInterval;   }   public long getTimeLastDone() {    return timeLastDone;   }   public void setTimeLastDone(long timeLastDone) {    this.timeLastDone = timeLastDone;   }   public TaskEntry(Task task,long timeInteral){    this.task=task;    this.timeInterval =timeInteral;   } } //调度管理Task的类,继承Thread只是为了调用其sleep()方法, //实际上,如果真的作Task调度的话,每个Task显然应该用单独的Thread来实现。 public class TaskSchedule extends java.lang.Thread {   private java.util.Vector taskList=new java.util.Vector();   private long sleeptime=10000000000l;//最短睡眠时间   public void addTask(TaskEntry taskEntry){    taskList.add(taskEntry);    taskEntry.setTimeLastDone(System.currentTimeMillis());    if (sleeptime>taskEntry.getTimeInterval())    sleeptime=taskEntry.getTimeInterval();   }   //执行任务调度   public void schedulePermorm(){    try{     sleep(sleeptime);     Enumeration e = taskList.elements();     while (e.hasMoreElements()) {      TaskEntry te = (TaskEntry) e.nextElement();      if (te.getTimeInterval() + te.getTimeLastDone() <          System.currentTimeMillis()) {       te.getTask().taskPerform();       te.setTimeLastDone(System.currentTimeMillis());       }     }    }catch (Exception e1){     e1.printStackTrace();    }   }   public static void main (String args[]){    TaskSchedule schedule=new TaskSchedule();    TaskEntry taks1=new TaskEntry(new ScanDiskTask(),10000);    TaskEntry taks2=new TaskEntry(new BackupTask(),3000);    schedule.addTask(taks1);    schedule.addTask(taks2);    while (true){      schedule.schedulePermorm()

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号