java - Java中的继承问题

标签 java design-patterns inheritance

我的数据库中有 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/

相关文章:

java - OSX Eclipse : No Java virtual machine was found after searching the following locations

Android:如何从图案创建背景?

Java包继承,简单查询

java - 使用封装时是否有一些共享方法行为的技巧?

java - 为什么我的 jsp 文件会收到 NullPointerException?

java - 如何从资源加载Log4j2配置文件

java - 如何在按下按钮时动态更改图片并保存该图像的状态

design-patterns - 使用与域实体的一对一接口(interface)是好的还是坏的做法?为什么?

asp.net-mvc - 具有依赖注入(inject)的工作单元 + 存储库 + 服务层

C# 继承多态类型