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()
。
私の質問は簡単です。このパターンは合理的ですか?すべての return ステートメントを含む巨大な switch ケースを見ると、何かがおかしいと感じます。何らかの方法でリフレクションを使用して、よりエレガントなルックアップ テーブル ソリューションを考え出そうとしましたが、うまくいくアプローチを見つけられないようです。