2012-03-11 82 views
0

我有一個名爲Document的類,可以通過PageImage進行擴展。對於每一個我有一個數據庫中的插入方法。 PageImage的插頁包含Document的插頁。這是使用instanceof的情況嗎?

我的疑問是,如果確定什麼方法將被調用的方法是先驗證類,像這樣:

if (doc instanceof Document){ 
    insertDoc(doc); 
} 
if (doc instanceof Page){ 
    insertPage(doc); 
} 
if (doc instanceof Image){ 
    insertImage(doc); 
} 

或者有另一種方式,因爲我總是聽說使用instanceof不是一個好事情。

編輯:多態性在這種情況下不起作用,對吧?類似於insert(Document doc)insert(Page doc)insert(Image doc)

回答

8

我認爲最好是在Document類中實現insert方法,並在擴展它的類中使用適當的方法覆蓋它。然後,請致電doc.insert();

+0

我理解你的解決方案,但我不知道是否是最好的選擇,因爲我將所有圖層(視圖,TOs,數據,核心等)分開。如果我用這種方式,這將打破這個組織,但它是一種可行的方式。謝謝。 – 2012-03-11 14:34:39

4

如果將來您計劃添加更多擴展Document類型並添加更多操作(而不是insert()),我會建議實現一個Visitor設計模式。否則,請按照Bynyamin Sharet的建議。

+0

我會更深入地研究這個解決方案,看看是否是最好的選擇。謝謝。 – 2012-03-11 14:37:40

+0

我認爲從架構的角度來看,這種方法更爲正確。祝您好運! ;) – aviad 2012-03-11 14:40:23