我不知道如何在实践中避免并行层次结构。例如,考虑一个必须在不同级别上创建/保存/编辑笔记的应用程序,它是一个基于 java swing 的应用程序。
域层次结构:
AbstractNote < MonthNote
< DayNote
< ProductNote
只读视图层次结构(显示在 JTabPane 上,每个都有 JTable 以显示特定的注释详细信息)
AbstractNotePanel < MonthNotePanel
< DayNotePanel
< ProductNotePanel
注释编辑器层次结构(当用户单击表格行中的特定注释时显示。
AbstractNoteEditorDialog < MonthNoteEditorDialog
< DayNoteEditorDialog
< ProductNoteEditorDialog
我读过一种避免这种情况的方法是使用访问者模式。 但这似乎不适用于我的情况。
我对上面的设计很满意,因为大多数通用代码都在抽象类中(在那里应用模板方法模式)。如果我必须创建一种新类型的笔记,例如 YearNote,那么我必须并行创建 YearNotePanel 和 YearNoteEditorDialog,这对我来说是完全可以接受的,因为由于模板,我不必编写很多代码。最重要的是,我想在我的设计中避免代码异味。请在上述情况下建议我替代设计,以便我的代码仍然是模块化的。谢谢