2010-05-06 44 views
-1

晚上好類,確定哪些是延長一個抽象類

我做的http://wiki2xhtml.sourceforge.net/一個大規模的重構,最終得到更好的概況和可維護性。 (我開始這個項目時,我決定開始編程,所以–你得到它吧;))

此刻我不知道如何解決現在我將說明問題:

每個文件將通過幾種解析器放(如一個鏈接,一個表格,一個用於圖像等):

public class WikiLinks extends WikiTask { ... } 
public class WikiTables extends WikiTask { ... } 

的文件將被解析這個辦法:

public class WikiFile { 
... 
public void parse() { 
    //Run all parsers on this file. 
    if (!parse) return; 
    WikiTask task = new WikiLinks(); 
    do { 
     task.parse(this); 
    } while ((task = task.nextTask()) != null); 
} 
} 

有時候我可能根本不想使用解析器(僅用於需要複製的文件),或者只選擇一個(例如,用於測試目的)。所以在運行task.parse()之前,我需要檢查這個特定的解析器是否真的是必需的。 (也許通過黑名單或白名單。)

你會建議什麼比較?每個WikiTask的ID(如何操作?)?比較任務對象本身與WikiTask的新實例(開銷)?

回答

0

對不起,但我沒有真正理解你的解析函數。如果您不想使用解析器,請將解析設置爲false? :) 如果我試圖猜測你想要什麼......我只是簡單地使用一個枚舉。你的任務可以持有ParserType type;,所以你可以做某事。如if(task.getParserType() == this.getParserType()) { task.parse(this) }如果您想爲某個特定任務使用不同的解析器,那麼您肯定需要使用列表。問候。

+0

是的,根本不解析已經工作。只運行某些分析程序還沒有。 - 對不起,我上面描述的parse()函數不是WikiTask的一部分,而是File對象的一部分。只要有下一個解析器(我使用task.nextTask(),因爲順序很重要),在WikiFile對象上調用parse()將運行所有可用的解析器。 - 使用枚舉來識別解析器可能確實是最簡單的方法,因爲它們也是輕量級的。 – 2010-05-07 07:21:45