我正在编写一个 Swing 应用程序,并进一步我之前的问题,已决定使用模型-视图-呈现器模式将用户界面与业务逻辑分开。
当我的应用程序启动时,它会执行以下代码:
Model model = new BasicModel();
Presenter presenter = new Presenter(model);
View view = new SwingView(presenter);
presenter.setView(view);
presenter.init();
它创建用户界面。事件是由View
,并委托给Presenter
. The Presenter
然后操纵Model
并更新View
因此。
为了处理一些事件,我需要从用户那里获取更多信息。在这些事件的情况下,我认为 Swing 视图生成一个新的是合适的JDialog
window.
一种思路让我觉得这可能是原始代码中合适的代码Presenter
:
public void handlePreferences() {
Preferences prefs = view.getPreferences();
model.setPreferences(prefs);
}
也就是说,每个内容JDialog
应该代表一个不同的对象,应该从View
并更新于Model
。然而,这留下了一个问题:我是否创建一个新的Model
来代表Preferences
对象和一个新的Presenter
用于事件处理JDialog
?
在我看来,创造一个新的Presenter
and Model
原始内部View
例如,如果我想更改 UI 以使用 JSF,这会迫使我做很多很难移植的工作。
请随时添加评论以进行澄清。
尽管“嵌套”设计模式并不罕见,但在您的情况下没有必要。借鉴其他答案:
Model
- 包含所有真实数据、变量、对象
- 知道如何将其存储的数据值设置为新值
- 响应命令(方法调用)
- 有方法 setPreferences(value1,value2,value3...);
View
- 是应用程序的IO,只是输出和输入
- 它只能对其自身、其状态起作用
- 它维护局部变量和对象,例如。它有 JButtons、JMenus、int 计数器...
- 它知道如何通知 Presenter 状态变化
- 其状态对 Presenter 可见,或通过方法调用显示
- 响应命令(方法调用)
- 知道如何获取用户的偏好
- 有方法askForPrefs();
- 有方法 getPrefState();
主持人
- 响应状态变化
- 做所有的决定,它告诉其他对象要做什么(而不是如何做)
- 知道何时需要偏好
- 知道从哪里获得新的偏好以及将它们放在哪里
- 有方法 newPrefsAvailable();
...从用户那里获取更多信息。在这些事件的情况下,我认为 Swing 视图生成一个新的 JDialog 窗口是合适的。
演示者 - 检查模型,确定需要新的首选项
演示者 - this.myView.askForPrefs(); //告诉视图向用户询问偏好值
View.askForPrefs - 弹出一个JDialog框,retVals作为状态改变存储在视图中
查看 - this.myPresenter.newPrefsAvailable();
Presenter - 使用 this.myModel.setPreferences (this.myView.getPrefState()) 进行响应;
Model.setPreferences - 将存储的值更改为 View.getPrefState()
演示者 - 检查模型 - 确定偏好良好
主持人-继续
JDialog 被视为 View 的扩展,它是 View 的成员,就像 JButton 一样。
模型具有权威的实际偏好值,视图具有表示 JDialog 状态的局部变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)