RSS
热门关键字:  java  Ajax  JSP  JSF  Struts
当前位置 : 首页>Java>列表

调度员,工人及任务的OO分析过程

来源: 作者: 时间:2007-10-08 点击:
  日常编码中,我们常需要为各种业务进行建模,为工厂中的任务调度建模就很有意思的,它的主要流程是基本是这样:

   1.调度员将工件图纸交付给工人,这是任务的下达.
   2.工人工作,完成工件,这是任务的进行过程.
   3.工件完成后,工人将图纸和工件返还给调度员,或者到了确定的时间后由调度员去取.这是任务的完成.
   4.重复上述三个步骤.

  在这个流程中,还存在一些特征:

   1.工人可以有多项任务,但他在一个时间只能做一个活,具体做那个由任务的优先级确定.
   2.任务完成后要让调度员知道,现实中是工人来找调度员或者调度员找工人来实现的.一般来说调度员找工人的情况居多.

  从上述情况分析,我们需要任务,工人,调度员三个类来完成建模,另外为了方便任务的存储和管理,还需要一个任务串类来辅助.

  首先看任务类,除了Id,name这样的常规属性外,它应该具有下面的成员:

   1.完成所需要的总工时数.
   2.已经完成的工时数,它和总工时数的比值就是完成比例.
   3.优先级.
   4.任务接受者,也就是工人.
   5.任务发布者,也就是调度员.

  它还应该具有一个重要函数,这个函数应该是定时被执行的,执行时先增加已经完成的工时数,然后看是否完成,是则把自己从任务接受者的待完成任务链表中删除,再添加到任务发布者的已完成任务链表中去.

具体代码如下:
package com.sitinspring.taskmanagement.domain;

import com.sitinspring.taskmanagement.util.IdUtil;

public class Task implements Comparable {
private String id;

private String name;

// 完成需消耗的工时数
private int manHour;

// 已经完成的工时数
private int completed;

// 优先级
private int priority;

// 接受任务者
private Worker worker;

// 发布任务者
private Attemper attemper;

public Task(String name, int manHour) {
this(name, manHour, 0);
}

public Task(String name, int manHour, int priority) {
id = IdUtil.generateId();
this.name = name;
this.manHour = manHour;
this.priority = priority;
this.completed = 0;
}

// 任务是否完成
public boolean isCompleted() {
return completed >= manHour;
}

// 添加完成度
public void addCompleted(int n) {
completed += n;

if (isCompleted()) {
completed = manHour;

if (worker != null) {
// 完成后让工人把自己从任务列表中删除
worker.removeTask(this);
}

if (attemper != null) {
// 完成后把任务添加到调度员(任务发送者)的完成任务链表
attemper.addCompletedTask(this);
}
}
}

public int compareTo(Object obj) {
Task another = (Task) obj;
return (another.priority) - this.priority;
}

public String toString() {
return "任务名:" + name + " 工人名:" + worker.getName() + " 完成度:" + completed
* 100 / manHour + "%";
}

public int getCompleted() {
return completed;
}

public void setCompleted(int completed) {
this.completed = completed;
}

public int getManHour() {
return manHour;
}

public void setManHour(int manHour) {
this.manHour = manHour;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getId() {
return id;
}

public int getPriority() {
return priority;
}

public void setPriority(int priority) {
this.priority = priority;
}

public Worker getWorker() {
return worker;
}

public void setWorker(Worker worker) {
this.worker = worker;
}

public Attemper getAttemper() {
return attemper;
}

public void setAttemper(Attemper attemper) {
this.attemper = attemper;
}
}

  其次再来看任务串类,它用于管理多个任务,自然它必定具有一个链表成员,类中大部分函数都是围绕这个成员设计的,另外考虑到工人需要取得最优先的任务,链表需要按任务的优先级排序,然后做一个函数用于取得最开头的任务即优先级最高的任务.isCompleted函数用于判断所有任务是否完成.

共4页: 上一页 1 [2] [3] [4] 下一页
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
Google Adsense
相关文章