【发布时间】:2013-01-03 15:04:41
【问题描述】:
我有一个ExecutorService 用于处理任务流。这些任务由我的DaemonTask 类表示,每个任务都构建一个响应对象,该对象传递给响应调用(超出本问题的范围)。我正在使用switch 语句根据任务 ID int 生成适当的任务。它看起来像;
//in my api listening thread
executorService.submit(DaemonTask.buildTask(int taskID));
//daemon task class
public abstract class DaemonTask implements Runnable {
public static DaemonTask buildTask(int taskID) {
switch(taskID) {
case TASK_A_ID: return new WiggleTask();
case TASK_B_ID: return new WobbleTask();
// ...very long list ...
case TASK_ZZZ_ID: return new WaggleTask();
}
}
public void run() {
respond(execute());
}
public abstract Response execute();
}
我所有的任务类(例如
WiggleTask())extend DaemonTask 并为execute() 方法提供了一个实现。
我的问题很简单;这种模式合理吗?当我查看带有所有返回语句的巨大开关盒时,感觉有些不对劲。我试图以某种方式使用反射提出一个更优雅的查找表解决方案,但似乎无法找到一种可行的方法。
【问题讨论】:
标签: java coding-style refactoring executorservice