Java类设计和SAX解析器

问题描述:

免责声明....我是Java和OOP的新手。Java类设计和SAX解析器

我有一个有四个子类的超类。对于每个子类,我需要解析一个XML文件。每个XML中约40%-50%的元素彼此相同,而每个子类的另一半不同。

我最初的做法是将SAX解析器处理程序代码包含在超类中,并简单地列出所有可能的XML元素。但是后来我面临将其他50%-60%的特定于子类的元素传递回子类的问题。由于超类不知道每个子类(我认为),如果我以某种方式将数据强制到子类,我认为我会违反OOP原则。

所以现在我想我可能需要设置四个不同的SAX解析器,每个子类都有一个。超类仍将用于常用实例变量和其他方法。但是我也会有一些SAX解析器代码的四倍。

关于如何继续并遵守面向对象原则的任何建议?

+0

没有更具体的细节,我们都只是猜测 – 2012-03-02 04:20:00

对于这种复杂性级别,我会推荐一种替代方法将XML映射到对象层。检出JAXB - 它为这些映射提供了一个非常健壮的框架,并自动处理对象继承。

+0

我看着JAXB并想出了如何启动和运行(在过程中学到了很多东西)。但是,由于我正在学习用于最终Android开发的Java,所以我发现Android SDK中不支持JAXB,并且可能会追求另一条路线。无论如何,谢谢你指出我在这个方向! – mraviator 2012-03-02 15:09:03

据我所知,你有4 SAXParser s(或者他们是DefaultHandlers?无论是......)共享父母。

父母应该能够保持4个孩子之间“共享”的状态。在继承方面,孩子可以肯定知道他们父母有什么方法和属性。事实上,他们的母公司是种的。他们需要知道他们继承了什么,这就是为什么如果您要定义B extends A,您必须import A。违反OOP原则的是当一个对象在一个聚合关系中引用了它的容器 - 这是倒退的。

因此,定义父级中的常见回调处理程序例程并覆盖必须处理额外标记的子级中的处理程序。只要确保您致电super(),并考虑使您的共同状态protected

+0

你是对的,将会有四个DefaultHandlers。由于我的目标是将此代码与Android SDK一起使用,因此建议的JAXB用法是不可行的。我会调查你的方法,看看我能不能把事情做好。谢谢。 – mraviator 2012-03-02 15:10:59