以下是创建Document对象的步骤:
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
我有几个问题:
为什么我们需要DocumentBuilderFactory?使用DocumentBuilder创建文档是不够的? (假设一些构造函数不够)
newDocumentBuilder是一种抽象方法。怎么称呼?
这里使用的设计模式是什么?它们的作用是什么?
答案 0 :(得分:1)
DocumentBuilderFactory
是一个抽象类。这并不意味着你不能调用属于该类的静态方法。
看看 DocumentBuilderFactory.newInstance()确实在做什么。
获取DocumentBuilderFactory的新实例。此静态方法创建新的工厂实例。此方法使用以下有序查找过程来确定要加载的DocumentBuilderFactory实现类:
- 使用javax.xml.parsers.DocumentBuilderFactory系统属性。
- 使用JRE目录中的属性文件“lib / jaxp.properties”。此配置文件采用标准java.util.Properties格式,并包含实现类的完全限定名称,其中键是上面定义的系统属性。 jaxp.properties文件只能由JAXP实现读取一次,然后缓存它的值以备将来使用。如果在第一次尝试从该文件读取时该文件不存在,则不再进行任何检查以检查其是否存在。在第一次读取之后,无法更改jaxp.properties中任何属性的值。
- 使用Services API(如JAR规范中详述)(如果可用)来确定类名。 Services API将在运行时可用的jar文件中的META-INF / services / javax.xml.parsers.DocumentBuilderFactory文件中查找类名。
- 平台默认的DocumentBuilderFactory实例。
醇>一旦应用程序获得对DocumentBuilderFactory的引用,它就可以使用工厂来配置和获取解析器实例。
现在您已了解工厂如何尝试加载正确的类。 newInstance()返回的实例将是 DocumentBuilderFactory 的实现。此实现实现了抽象方法* newDocumentBuilder *,它将为给定的实现创建文档构建器。
很明显,工厂模式在这里使用。