在我的应用程序中有代表任务的对象(存储在数据库中)。还有一些对象具有任务的实际实现(一些业务逻辑)——我们称它们为运行器。所以跑步者可以实现以下接口:
public interface Runner<T> {
void run(T task);
}
给定一个任务对象,我需要一些好的方法来创建/获取一个运行器,以便我可以运行它。
我宁愿避免类似的事情
if(task instance of DoSomethingTask) {
return new DoSomethingTaskRunner();
} else if(task instance of DoSomethingElseTask) {
return new DoSomethingElseRunner();
}
因为每当我创建一个新的跑步者时,我还需要记住在上面的块中添加另一个 if/else。自动获取实现的跑步者会很好
Runner<myTask.getClass()> // pseudocode ;)
这样做的一个好方法是让任务有一个“getRunner”方法(添加一个新任务,我需要实现该方法,所以我不会忘记它)但不幸的是,由于项目依赖性,我的任务对象无法知道关于 Runners 的任何信息。
关于如何以一种好的方式做到这一点的任何想法?
顺便说一句:我正在使用 Spring,因此根据传递的任务获取 Runner bean 会更好。