Java 访客设计模式和观察者设计模式可以结合吗?

Java 访客设计模式和观察者设计模式可以结合吗?,java,user-interface,design-patterns,observer-pattern,visitor-pattern,Java,User Interface,Design Patterns,Observer Pattern,Visitor Pattern,假设我有一个简单的Java程序,它读取一些文件并显示一些数据 我很困惑,我认为应该应用一种模式,但我无法决定要实现哪种模式 以下是场景: 每当我选择一个目录时,我希望我的程序显示目录名、所有文件列表和其他数据(如文件大小、文件扩展名等)。每当我单击一个文件名时,我希望我的程序显示其路径,如果它是图像文件和其他内容,请预览它 程序将把数据保存在一个数据持有者类中:文件选择目录、列表文件插入目录、文件选择文件、JSONObject文件数据等 该程序将有许多GUI对象用于显示;文本字段、面板、标签、列

假设我有一个简单的Java程序,它读取一些文件并显示一些数据

我很困惑,我认为应该应用一种模式,但我无法决定要实现哪种模式

以下是场景

每当我选择一个目录时,我希望我的程序显示目录名、所有文件列表和其他数据(如文件大小、文件扩展名等)。每当我单击一个文件名时,我希望我的程序显示其路径,如果它是图像文件和其他内容,请预览它

程序将把数据保存在一个数据持有者类中:文件选择目录、列表文件插入目录、文件选择文件、JSONObject文件数据等

该程序将有许多
GUI对象
用于显示;文本字段、面板、标签、列表

经典的旧方法是在一个方法中编写所有代码*按下按钮->在actionListener中*从磁盘获取文件,*读取文件名和其他内容,*用数据填充GUI对象。这有点糟糕

所以我决定使用设计模式。然后,每当我单击此按钮并从磁盘读取时,我只更新dataHolder类(setSelectedDirectory、setFileData、FillCurrentFileList..类似的方法),这些更新操作将触发执行所需GUI更新的类

但我停留在两种方法之间

-使用观察者模式,我创建了一些观察者,例如,当数据持有者的fileData(JSON)对象更新时,我会通知相关的文本字段,然后它们会显示正确的数据

-但是使用访问者模式,访问者类将处理不同的对象,它将为不同的GUI类运行不同的代码。JList将尝试显示列表,或者一些文本字段将尝试解析JSONObject并仅显示相关字符串。但我不需要太多不同的功能,我的意思是我只希望GUI对象显示一些数据,我唯一的访问者类将是DisplayVisitor,它将期望GUI显示对象的唯一任务-显示数据。如果我需要做某件事,做另一件事,做另一件事。。。类,这种方法会很好,但我不需要其他函数

这两种方法都有效吗?我只是无法理解这种情况的不同。两者都提供了一个解决方案,Observer更简单,但它是否提供了处理不同GUI类的功能,例如用Arraylist填充JList或使JLabel显示jpeg文件


或者我可以组合这些模式吗?感谢阅读。

我认为观察者模式更适合您的情况。访问者模式适用于您希望向某些无法/不想修改的对象添加功能的场景。

“我认为应该应用一种模式…”为什么?模式从来都不是必需的。“我很困惑,”这是一个很好的理由来忘记模式,用最简单的方法解决问题。在代码工作后考虑重构到模式。现在看来,模式是一个问题,而不是一个解决方案。