我的数据库中有 5 个不同的表。我编写了一个抽象的“Converter.java”类,它从数据库中取出数据并将其转换为“tree.xml”文件。
树.xml
<?xml version="1.0" standalone="no"?>
<tree>
<declarations>
<attributeDec1 name="name" type="String"/>
</declarations>
<branch>
<attribute name="name" value="process 1"/>
<leaf>
<attribute name="name" value="process 2"/>
</leaf>
<leaf>
<attribute name="name" value="process 3"/>
</leaf>
</branch>
</tree>
正如您所猜测的,上述 tree.xml 的结构对于所有 5 个表将保持相同。唯一的区别在于属性“value”的值。
要获取该“值”属性的值,转换器首先必须在数据库中查询这些值。
因此,对于 5 个不同的表应该有 5 个不同的查询。因此,我没有编写 5 个不同的转换器,而是制作了一个具有类似功能的“Converter.java”
- openTree()
- closeTree()
- openBranch()
- closeBranc()
- openLeaf()
- closeLeaf()
- addAttribute()
在上述方法中,我已经实现了除 addAttribute() 方法之外的所有方法,因为它将根据表进行实现。
之后,我编写了 5 个不同的转换器,每个转换器对应一个表,并且所有转换器都扩展了“Converter.java”
我在 Converter.java 类中创建了一个名为“query”的字段。由于该字段由所有 5 个转换器继承,因此我已在这 5 个转换器的构造函数中初始化了该字段。
现在我的问题如下:
问。我不确定我是否正确使用了继承,还是应该对上述方法进行一些更改?
编辑:
第二季度。我在 Converter.java 类中还有一种使用“查询”字段的方法。由于该字段未在 Converter.java 类中初始化,因此无论我在所有 5 个子转换器中复制该方法还是将该方法放入父类(即 Converter.java)中都可以
最佳答案
我认为策略模式在这里更合适。您可以创建一个具有常见行为的非抽象 Converter
类,并为其提供 ValueSource
,该类可以执行特定于表的值检索。然后,您创建一个QueryValueSource
(ValueSource
的子类)来根据指定的查询检索值。
要获得具体策略,您可以将不同的查询传递到 QueryValueSource
的构造函数中,或者对其进行子类化以创建特定于表的源。
关于java - Java中的继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2208215/