2012-03-02 85 views
0

免責聲明....我是Java和OOP的新手。Java類設計和SAX解析器

我有一個有四個子類的超類。對於每個子類,我需要解析一個XML文件。每個XML中約40%-50%的元素彼此相同,而每個子類的另一半不同。

我最初的做法是將SAX解析器處理程序代碼包含在超類中,並簡單地列出所有可能的XML元素。但是後來我面臨將其他50%-60%的特定於子類的元素傳遞迴子類的問題。由於超類不知道每個子類(我認爲),如果我以某種方式將數據強制到子類,我認爲我會違反OOP原則。

所以現在我想我可能需要設置四個不同的SAX解析器,每個子類都有一個。超類仍將用於常用實例變量和其他方法。但是我也會有一些SAX解析器代碼的四倍。

關於如何繼續並遵守面向對象原則的任何建議?

+0

沒有更具體的細節,我們都只是猜測 – 2012-03-02 04:20:00

回答

1

對於這種複雜性級別,我會推薦一種替代方法將XML映射到對象層。檢出JAXB - 它爲這些映射提供了一個非常健壯的框架,並自動處理對象繼承。

+0

我看着JAXB並想出瞭如何啓動和運行(在過程中學到了很多東西)。但是,由於我正在學習用於最終Android開發的Java,所以我發現Android SDK中不支持JAXB,並且可能會追求另一條路線。無論如何,謝謝你指出我在這個方向! – mraviator 2012-03-02 15:09:03

0

據我所知,你有4 SAXParser s(或者他們是DefaultHandlers?無論是......)共享父母。

父母應該能夠保持4個孩子之間「共享」的狀態。在繼承方面,孩子可以肯定知道他們父母有什麼方法和屬性。事實上,他們的母公司是種的。他們需要知道他們繼承了什麼,這就是爲什麼如果您要定義B extends A,您必須import A。違反OOP原則的是當一個對象在一個聚合關係中引用了它的容器 - 這是倒退的。

因此,定義父級中的常見回調處理程序例程並覆蓋必須處理額外標記的子級中的處理程序。只要確保您致電super(),並考慮使您的共同狀態protected

+0

你是對的,將會有四個DefaultHandlers。由於我的目標是將此代碼與Android SDK一起使用,因此建議的JAXB用法是不可行的。我會調查你的方法,看看我能不能把事情做好。謝謝。 – mraviator 2012-03-02 15:10:59