我有一个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()
方法的实现。
我的问题很简单;这种模式合理吗?当我查看带有所有返回语句的巨大开关盒时,感觉有些不对劲。我试图以某种方式使用反射提出一个更优雅的查找表解决方案,但似乎无法找到一种可行的方法。