这些是创建Document对象的步骤:
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
我有几个问题:
为什么我们需要一个DocumentBuilderFactory?有一个DocumentBuilder创建文档还不够吗? (假设一些构造函数是不够的)
newDocumentBuilder是一种抽象方法。怎么称呼呢?
这里使用的设计模式是什么,它们的作用是什么?
最佳答案
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中的任何属性的值都无法更改。
如果可用,请使用Services API(如JAR规范中所述)确定类名。 Services API将在运行时可用的jar中的文件META-INF / services / javax.xml.parsers.DocumentBuilderFactory中寻找类名。
平台默认的DocumentBuilderFactory实例。
应用程序获得对DocumentBuilderFactory的引用后,便可以使用工厂来配置和获取解析器实例。
现在,您知道工厂如何尝试加载正确的类。 newInstance()返回的实例将是DocumentBuilderFactory的实现。此实现实现抽象方法* newDocumentBuilder *,该方法将为该给定实现创建文档构建器。
显然,这里使用了工厂模式。