2010-05-06 41 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