私は次のクラスを持っています:
public enum TaskType {
VERIFY_X_TASK, COMPUTE_Y_TASK, PROCESS_Z_TASK;
}
public interface Task{
void process();
}
@Component
public class VerifyXTask implements Task{
// Similar classes for the other types of tasks
public void process() {
}
}
@Component
public class TaskFactory{
private Map<TaskType, Task> tasks;
public Task getTask(TaskType type){
return tasks.get(type); // return a singleton with all it's fields injected by the application context
}
}
class UseTool{
@Autowired
private TaskFactory taskFactory;
public void run(String taskType){
Task task = taskFactory.getTask(TaskType.valueOf(taskType));
task.process();
}
}
TaskType と Task の間の関連付けをファクトリに挿入する最もエレガントな方法は何ですか? ほぼ 100 のタスク タイプがあり、これらは頻繁に変更される可能性があることを考慮してください。
-- 詳細な説明: TaskFactory クラスで次のようにできます。
tasks.put(TaskType.VERIFY_X_TASK, new VerifyTask());
tasks.put(TaskType.COMPUTE_Y_TASK, new ComputeTask());
tasks.put(TaskType.PROCESS_Z_TASK, new ProcessTask());
ただし、これは Task オブジェクトにプロパティを挿入しません。