创建Document对象

时间:2013-07-25 08:53:24

标签: java design-patterns dom

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

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

我有几个问题:

  1. 为什么我们需要DocumentBuilderFactory?使用DocumentBuilder创建文档是不够的? (假设一些构造函数不够)

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

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

1 个答案:

答案 0 :(得分: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.   
  3. 使用JRE目录中的属性文件“lib / jaxp.properties”。此配置文件采用标准java.util.Properties格式,并包含实现类的完全限定名称,其中键是上面定义的系统属性。 jaxp.properties文件只能由JAXP实现读取一次,然后缓存它的值以备将来使用。如果在第一次尝试从该文件读取时该文件不存在,则不再进行任何检查以检查其是否存在。在第一次读取之后,无法更改jaxp.properties中任何属性的值。
  4.   
  5. 使用Services API(如JAR规范中详述)(如果可用)来确定类名。 Services API将在运行时可用的jar文件中的META-INF / services / javax.xml.parsers.DocumentBuilderFactory文件中查找类名。
  6.   
  7. 平台默认的DocumentBuilderFactory实例。
  8.         

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

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

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