这是一个更普遍的问题: 我有一个非常复杂的文件表(数据模型并不简单),当用户点击一个条目时,另外两个视图组件需要更改 - 文件统计视图和文件内容视图 - 两者都在同一个屏幕。
一个选项是将所有这些组件类定义放在同一个文件中,然后互相引用 - 但这会产生非常混乱的代码。
我能想到的另一个选择是将统计信息和内容组件传递给表对象,并让他使用它 - 但这将使表不再 - 可以在其他任何地方重用。
我确信有更好的方法 - 你会建议做什么?
选项1:
class MyPanel extends JPanel{
private MyTable table;
private MyFileViewer fv;
private MyFileStats stats;
class MyTable {
addMouseListener({ ... fv.update(); stats.update(); })
}
class MyFileViewer{...}
class MyFileStats{...}
}
选项2:
class MyTable {
MyTable(MyFileViewer fv, MyFileStats stats) { ...
addMouseListener({fv.update, stats.update ... }
}
}
答案 0 :(得分:5)
选项3:Model–View–Controller模式,如here和this outline所述。 MVC取决于observer pattern。不要让每个视图更新其他视图,而是安排每个视图将自己注册为数据模型的监听器。当模型更改时,每个视图都会相应地更新自己。