gpt4 book ai didi

java - 将 MVP 模式应用于 JDialogs

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:52:27 25 4
gpt4 key购买 nike

我正在编写一个 Swing 应用程序,进一步到 my previous question , 已决定使用 Model-View-Presenter将用户界面与业务逻辑分开的模式。

当我的应用程序启动时,它会执行以下代码:

Model model = new BasicModel();
Presenter presenter = new Presenter(model);
View view = new SwingView(presenter);
presenter.setView(view);

presenter.init();

创建用户界面。事件由 View 生成, 并委托(delegate)给 Presenter . Presenter然后操纵 Model并更新 View相应地。

为了处理一些事件,我需要从用户那里获得进一步的信息。对于这些事件,我认为 Swing View 生成一个新的 JDialog 是合适的。窗口。

一种思路让我觉得这可能是原始 Presenter 中的适当代码:

public void handlePreferences() {
Preferences prefs = view.getPreferences();
model.setPreferences(prefs);
}

也就是每个JDialog的内容应表示应从 View 中检索的不同对象并在 Model 中更新.然而,这留下了一个问题:我是否创建一个新的 Model代表 Preferences对象和一个新的 Presenter用于事件处理 JDialog

在我看来,创建一个新的 PresenterModel原始内部 View例如,如果我想更改 UI 以使用 JSF,这迫使我做很多更难移植的工作。

请随时添加评论以进行说明。

最佳答案

虽然“嵌套”设计模式并不少见,但在您的情况下没有必要。借鉴其他答案:

型号
- 包含所有真实数据、变量、对象
- 知道如何将其存储的数据值设置为新值
- 响应命令(方法调用)
- 有方法 setPreferences(value1,value2,value3...);

查看
- 是应用程序的 IO,只是输出和输入
- 它只能在它自己的状态下工作
- 它维护局部变量和对象,例如。它有 JButtons、JMenus、int 计数器 ...
- 它知道如何通知 Presenter 状态变化
- 其状态对 Presenter 可见,或通过方法调用显示
- 响应命令(方法调用)
- 知道如何从用户那里获取偏好
- 有方法 askForPrefs();
- 有方法 getPrefState();

主持人
- 响应状态变化
- 做所有的决定,它告诉其他对象做什么(而不是怎么做)
- 知道什么时候需要偏好
- 知道从哪里获得新的偏好以及将它们放在哪里
- 有方法 newPrefsAvailable();

... to obtain further information from the user. In the case of these events, I believe it is appropriate for the Swing view to spawn a new JDialog window.

Presenter - 检查模型,确定是否需要新的首选项
演示者 - this.myView.askForPrefs();//告诉 View 向用户询问偏好值
View.askForPrefs - 弹出一个 JDialog 框,retVals 存储在 View 中作为状态变化
查看 - this.myPresenter.newPrefsAvailable();
Presenter - 响应 this.myModel.setPreferences (this.myView.getPrefState());
Model.setPreferences - 将存储的值更改为 View.getPrefState()
演示者 - 检查模型 - 确定偏好是否正确
演示者 - 继续

JDialog 被视为只是 View 的扩展,它就像 JButton 一样是 View 的成员。模型具有权威的实际偏好值, View 具有表示 JDialog 状态的局部变量。

关于java - 将 MVP 模式应用于 JDialogs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/519725/

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