在我的應用程序中有表示任務的對象(存儲在數據庫中)。 也會有對象具有實際的任務執行(一些業務邏輯) - 讓我們稱他們爲跑步者。 所以運動員可以即實現以下接口:需要Java模式:基於其他對象的類實例化對象
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」的方法(添加新任務的一個很好的方式,我需要實現的方法,所以我不能忘記它),但不幸的是,由於項目依賴關係,我的Task對象無法知道任何關於Runners的內容。
有關如何以一種很好的方式做到這一點的任何想法?
btw:我使用的是Spring,所以根據傳遞的任務得到一個Runner bean會更好。
如何使用Class.forName()動態創建跑步者?這樣你只需要在任務 – yurib 2013-02-26 13:43:18
Erm中存儲跑步者類名,這就是界面的全部要點。你不必知道具體的類是什麼。 – 2013-02-26 13:43:19