我無法弄清楚如何在實踐中避免並行層次結構。例如考慮一個應用程序必須創建/保存/編輯不同級別的筆記,這是一個基於Java swing的應用程序。並行繼承層次真的是代碼味道嗎?
域層級:
AbstractNote < MonthNote
< DayNote
< ProductNote
只讀視圖層次(上JTabPane各有JTable中顯示,以顯示特定筆記的詳細信息)
AbstractNotePanel < MonthNotePanel
< DayNotePanel
< ProductNotePanel
筆記編輯器層次結構(如圖所示,當用戶點擊一個
AbstractNoteEditorDialog < MonthNoteEditorDialog
< DayNoteEditorDialog
< ProductNoteEditorDialog
我看過一種方法,以避免這種情況是使用訪客模式。 here 但這似乎並不適用於我的情況。
我很滿意我的上述設計,因爲大多數通用代碼都在抽象類中(應用模板方法模式)。如果我必須創建一種新的註釋類型,例如YearNote,那麼我必須同時創建YearNotePanel和YearNoteEditorDialog,這對我來說是完全可以接受的,因爲我不必因模板而編寫很多代碼。最重要的是,我想避免設計中的代碼味道。請在上面的場景中建議我使用替代設計,以便我的代碼仍然是模塊化的。 謝謝
從beginNote開始,MonthNote,DayNote和ProductNote有什麼區別? –
他們彼此有點不同,未來可能會非常不同。每個音符都綁定到一個用戶,並有一個長文本。 MonthNOte和DayNote分別有joda MonthYear和LocalDAte。產品注意事項沒有日期信息,而是有產品實例(另一個域對象),我們只是在UI上顯示產品的名稱。 – Joe
擺脫他們的**沒有**延長JSomething,曾經 - 他們的目的是爲了使用 – kleopatra