【问题标题】:Creating a Document object创建文档对象
【发布时间】:2013-07-25 17:36:02
【问题描述】:

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

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

我有几个问题:

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

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

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

【问题讨论】:

    标签: java design-patterns dom


    【解决方案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*,它将为给定的实现创建文档构建器。

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

    【讨论】:

    • 谢谢!但是 DocumentBuilder 的作用是什么?为什么需要 2 个类来构造 Document 对象?
    • 文档构建器隐藏了文档的实现和构建细节。
    猜你喜欢
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多