2013-07-05 137 views
0

我正在研究一些Java,我不太清楚如何解決這個問題,至少不是沒有我想要避免的醜陋。我有一個父級抽象類,讓我們說Item。 Item有三個子類ItemA,它是具體的,另一個抽象類ItemB,它本身有兩個具體的子類ItemB1和ItemB2。 ItemA只是一個存根,如果Item本身可以變成具體的,可能不需要存在,但我不確定存根是否需要取決於解決方案。所有這些都必須從Item或父接口繼承,因爲它們將位於許多Collections中。類型層次結構+可選字段

現在,我們有這個層次的項目。有趣的部分是Items有一個可選的對象字段,假設它是一個名爲Functionality的對象。任何具體的類都可能有一個功能對象,但有些不會。它需要在某些方面,但不應該存在於其他方面。我想避免將它拍在Item中並且始終檢查它是否存在。這是可能的,但讓我覺得有點難看。我不認爲將層次結構拆分爲兩個單獨的樹是非常可行的,因爲我主要是用一塊額外的數據複製一堆類。

在這種情況下該怎麼辦?我最初想到使用裝飾器,但這意味着類似瘋狂的類型檢查,看看它是否是一個FunctionalityDecoratedItem或某些我每次需要查看它是否具有功能性字段,並且我已經做了一些類型檢查以確定什麼與Item的不同子類型有關。也許我只是在挑剔這個(我有時傾向於掛在小細節上),或者有一個明顯的解決方案,我的鼻子阻塞,但我希望我錯過了一種模式或技術,可以實現這個乾淨。

回答

2

定義一個接口。有些類實現了接口,有些則不是。您可以使用instanceof來檢查對象是否在運行時實現接口。

+0

我應該提到他們都需要實現一個通用接口,因爲會有多個接口集合被使用的場合。聲明一個接口並將其分成兩組,一組具有功能性,另一組不具有另一組接口將結束大量重複並使維護更加困難。 – user1017413