gpt4 book ai didi

java - 模型类应该扩展 Observable 还是应该是扩展 Observable 的类中的变量 Observable

转载 作者:行者123 更新时间:2023-11-30 03:44:31 29 4
gpt4 key购买 nike

在 java swing 项目中,我有一个模型类,它保存某个 JPanel 的状态。我需要使这些数据可供 View 使用。我认为有两种选择。有一个扩展 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 的 View 类中,它将使用 Observable 参数或 Object 参数来填充 JPanel。

    @Override
public void update(Observable o, Object arg) {
if(o instanceof BoardObservable) {
this.board = (Board) arg;
}
}

哪个是最好的选择?

最佳答案

如上所示,使用额外的类似乎是多余的。然而,在实际尝试理解您想要做什么时,看起来您已经回到了 Model-View-Controller (MVC)设计。

由于该链接可以很好地处理 MVC,因此我将直接解决您的问题。主要目标是将 View 和交互( Controller )与模型分离,以便您可以将模型重用于其他用户界面。

董事会观察员应该成为您的控制者。它也应该是 Board 的观察者,但它也直接调用 Board 对象。如果模型发生任何影响 View 的更改(不仅仅是信息的更新,而是逻辑状态 - 例如由于程序或数据的状态而被禁用的按钮), Controller 应该处理该信息并进行相应的更新到 View 。

使 View 成为董事会的观察员。 View 应通知 Controller 任何操作, Controller 应更新 View 的逻辑状态(禁用按钮等)。如果模型中的原始数据发生变化,您可以直接更新 View 。

最后,将所有内容整合在一起。我倾向于将模型传递到 Controller 的构造函数中,并让 Controller 创建(和...控制) View 。

Model m = new Model();
Controller c = new Controller(m);

关于java - 模型类应该扩展 Observable 还是应该是扩展 Observable 的类中的变量 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26075067/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com