DocumentBuilderFactory
是一个抽象类。这并不意味着您不能调用属于该类的静态方法。
看看DocumentBuilderFactory.newInstance()的真正作用。
http://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/parsers/DocumentBuilderFactory.html#newInstance()
获取 DocumentBuilderFactory 的新实例。这个静态方法创建一个新的工厂实例。此方法使用以下有序查找过程来确定要加载的 DocumentBuilderFactory 实现类:
- 使用 javax.xml.parsers.DocumentBuilderFactory 系统属性。
- 使用 JRE 目录中的属性文件“lib/jaxp.properties”。此配置文件采用标准 java.util.Properties 格式,包含实现类的完全限定名称,键是上面定义的系统属性。JAXP 实现只读取一次 jaxp.properties 文件,然后缓存它的值以供将来使用。如果在第一次尝试读取文件时文件不存在,则不会进一步尝试检查其是否存在。第一次读取 jaxp.properties 中的任何属性的值后,便无法更改它的值。
- 如果可用,请使用服务 API(如 JAR 规范中所述)来确定类名。服务 API 将在运行时可用的 jar 中的 META-INF/services/javax.xml.parsers.DocumentBuilderFactory 文件中查找类名。
- 平台默认 DocumentBuilderFactory 实例。
一旦应用程序获得了对 DocumentBuilderFactory 的引用,它就可以使用工厂来配置和获取解析器实例。
现在您知道了工厂如何尝试加载正确的类。newInstance()返回的实例将是DocumentBuilderFactory的实现。这个实现实现了抽象方法 * newDocumentBuilder* ,它将为给定的实现创建文档构建器。
很明显,这里使用了工厂模式。