0

以下是创建 Document 对象的步骤:

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();

我有几个问题:

  1. 为什么我们需要 DocumentBuilderFactory?有一个 DocumentBuilder 来创建文档还不够吗?(假设几个构造函数是不够的)

  2. newDocumentBuilder是一个抽象方法。怎么称呼?

  3. 这里使用的设计模式是什么,它们的作用是什么?

4

1 回答 1

1

DocumentBuilderFactory是一个抽象类。这并不意味着您不能调用属于该类的静态方法。

看看DocumentBuilderFactory.newInstance()的真正作用。

http://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/parsers/DocumentBuilderFactory.html#newInstance()

获取 DocumentBuilderFactory 的新实例。这个静态方法创建一个新的工厂实例。此方法使用以下有序查找过程来确定要加载的 DocumentBuilderFactory 实现类:

  1. 使用 javax.xml.parsers.DocumentBuilderFactory 系统属性。
  2. 使用 JRE 目录中的属性文件“lib/jaxp.properties”。此配置文件采用标准 java.util.Properties 格式,包含实现类的完全限定名称,键是上面定义的系统属性。JAXP 实现只读取一次 jaxp.properties 文件,然后缓存它的值以供将来使用。如果在第一次尝试读取文件时文件不存在,则不会进一步尝试检查其是否存在。第一次读取 jaxp.properties 中的任何属性的值后,便无法更改它的值。
  3. 如果可用,请使用服务 API(如 JAR 规范中所述)来确定类名。服务 API 将在运行时可用的 jar 中的 META-INF/services/javax.xml.parsers.DocumentBuilderFactory 文件中查找类名。
  4. 平台默认 DocumentBuilderFactory 实例。

一旦应用程序获得了对 DocumentBuilderFactory 的引用,它就可以使用工厂来配置和获取解析器实例。

现在您知道了工厂如何尝试加载正确的类。newInstance()返回的实例将是DocumentBuilderFactory的实现。这个实现实现了抽象方法 * newDocumentBuilder* ,它将为给定的实现创建文档构建器。

很明显,这里使用了工厂模式。

于 2013-07-25T09:36:02.580 回答