在一个java swing项目中,我有一个模型类,它保存某个JPanel的状态。我需要将这些数据提供给视图。 我看到它有两个选项。有一个扩展Observable的类,并将模型作为实例变量。请参阅下面的代码示例。或者只是让模型类扩展Observable本身。
public class BoardObservable extends Observable {
private Board board;
public Board getBoardText() {
return board;
}
public void setBoardText(Board board) {
this.board = board;
setChanged();
notifyObservers(board);
}
}
因此,在实现Observer的视图类中,它将使用Observable参数或Object参数来填充JPanel。
@Override
public void update(Observable o, Object arg) {
if(o instanceof BoardObservable) {
this.board = (Board) arg;
}
}
哪个是最佳选择?
答案 0 :(得分:1)
如上所示,使用额外的类似乎是多余的。但是,在实际尝试理解您要执行的操作时,看起来您已经支持Model-View-Controller (MVC)设计。
由于该链接非常好地处理MVC,我将直接解决您的问题。主要目标是将View和交互(控制器)与模型分离,以便您可以将模型重用于其他用户界面。
BoardObserver应成为您的控制器。它也应该是理事会的观察员,但它也直接调用理事会对象。如果影响视图的模型有任何更改(不仅仅是更新信息,而是逻辑状态 - 就像按钮因程序或数据的状态而被禁用),控制器应该处理该信息并进行相应的更新观点。
让视图成为董事会的观察者。视图应通知控制器任何操作,控制器应更新视图的逻辑状态(禁用按钮等)。如果模型中的原始数据发生更改,您可以直接从该更新视图。
最后,将它们全部拉出来。我倾向于将模型传递给Controller的构造函数,让Controller创建(并控制)视图。
Model m = new Model();
Controller c = new Controller(m);
答案 1 :(得分:1)