我有以下類別:春天 - 動態廠基於枚舉
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();
}
}
什麼是注射任務類型和任務之間的關係進廠的最優雅的方式? 考慮到幾乎有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());
但這並不注入在任務對象中的任何屬性。
這並不完全清楚你想要做什麼;爲什麼你有一個'enum'這是一個操作列表,然後'enum'值和實現類之間沒有任何關係? – chrylis
問題是如何映射這種關係。我可以在工廠做類似tasks.put(VERIFY_X_TASK,new VerifyTask());等等,但新的操作符不會注入VerifyTasks依賴項。 –