2013-07-25 62 views
0

這些是創建一個文檔對象的步驟:創建文檔對象

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

我有幾個問題:

  1. 爲什麼我們需要的DocumentBuilderFactory?使用DocumentBuilder創建文檔不夠嗎? (假設幾個構造函數不夠)

  2. newDocumentBuilder是一種抽象方法。它怎麼叫?

  3. 這裏使用的設計模式是什麼?它們的作用是什麼?

回答

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.properties文件僅由JAXP實現讀取一次,然後將其值緩存以供將來使用。如果在第一次嘗試讀取文件時該文件不存在,則不會再嘗試檢查其存在。第一次讀取jaxp.properties中的任何屬性值都是不可能的。
  3. 使用Services API(詳見JAR規範)(如果可用)確定類名。 Services API將在運行時可用的jar文件中的META-INF/services/javax.xml.parsers.DocumentBuilderFactory文件中查找類名。
  4. 平臺默認DocumentBuilderFactory實例。

一旦應用程序獲得對DocumentBuilderFactory的引用,它就可以使用工廠來配置和獲取解析器實例。

現在你知道工廠如何加載正確的類。由newInstance()返回的實例將執行DocumentBuilderFactory。該實現實現了抽象方法* newDocumentBuilder *,該方法將爲給定的實現創建文檔生成器。

這裏顯然使用工廠模式。

+0

謝謝!但DocumentBuilder的作用是什麼?爲什麼需要2個類來構造一個Document對象? – Sorin

+0

文檔生成器隱藏文檔的實現和構造細節。 – Bart