当前位置: 首页 > 面试题库 >

将MVP模式应用于JDialogs

夔博
2023-03-14
问题内容

我正在编写一个Swing应用程序,并且进一步解决了,已经决定使用Model-View-
Presenter
模式将用户界面与业务逻辑分开。

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

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

presenter.init();

创建用户界面。事件由生成View,并委托给Presenter。在Presenter随后操纵Model和更新View相应。

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

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

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

也就是说,每个内容JDialog都应代表一个不同的对象,该对象应从中检索View并在中更新Model。但是,这留下了问题:我是否要创建一个新ModelPreferences对象来表示该对象,并创建一个新Presenter的事件处理对象JDialog

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

请随时添加评论以进行澄清。


问题答案:

尽管拥有“嵌套”设计模式并不罕见,但在您的情况下却没有必要。借鉴其他答案:

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

视图
-是应用程序的IO,仅是输出和输入
-它只能按自身状态运行
-维护局部变量和对象,例如。它具有JButtons,JMenus和int计数器…-
知道如何通知Presenter状态更改
-它的状态对Presenter可见,或通过方法调用显示
-响应命令(方法调用)
-知道如何获取用户的首选项
-具有方法askForPrefs();
-具有方法getPrefState();

Presenter-
响应状态更改
-做出所有决定,告诉其他对象该怎么做(而不是怎么做)
-知道何时需要首选项
-知道从何处获取新首选项以及将其放置在哪里
-具有方法newPrefsAvailable( );

…以从用户那里获得更多信息。对于这些事件,我认为使用Swing视图生成一个新的JDialog窗口是合适的。

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

JDialog被视为View的扩展,就像JButton一样,它是View的成员。该模型具有权威的实际首选项值,并且视图具有表示JDialog状态的局部变量



 类似资料:
  • 一、MVP概述 MVP,全称 Model-View-Presenter,即模型-视图-层现器。 提到MVP,就必须要先介绍一下它的前辈MVC,因为MVP正是基于MVC的基础发展而来的。两个之间的关系也是源远流长。 MVC,全称Model-View-Controller,即模型-视图-控制器。 具体如下: View:对应于布局文件 Model:业务逻辑和实体模型 Controllor:对应于Acti

  • 我有一个系统(游戏),我尝试使用架构模型视图呈现器来实现它。我现在所做的是演示者中的while循环,它不断调用视图方法来显示。我这样做的方式是使用Producer/Consumer模式,其中View为触摸事件(Android)注册和事件处理程序,并生成相应的触摸实例,演示者在while循环中使用。 现在我想在模型和演示者之间使用模式观察者/Suscriber。使用这个模式,演示者将是观察者订阅模型

  • 问题内容: 使用标签将SVG直接包含在文档中时,您可以通过文档的样式表将CSS样式应用于SVG。但是,我试图将一种样式应用于嵌入的SVG(使用标签)。 是否可以使用以下代码? 问题答案: 简短的答案:不,因为样式不适用于文档边界。 但是,由于有标签,因此可以使用脚本将样式表插入svg文档。 这样的事情,并请注意,此代码假定已完全加载: 也可以插入一个元素来引用外部样式表: 另一个选择是使用第一种方

  • 我试图创建一个从扩展而来的自定义视图,并在代码中应用样式,这样我就不需要在xml中这样做。 风格是: 一切正常,但property。由于某种原因,背景色并没有改变,它有主题的原色。但是,如果我尝试将样式应用于xml中的,它确实会改变颜色。 你知道为什么会这样,或者我怎样才能做到吗?

  • 本文向大家介绍说说你对MVC、MVP、MVVM模式的理解相关面试题,主要包含被问及说说你对MVC、MVP、MVVM模式的理解时的应答技巧和注意事项,需要的朋友参考一下 ickt-5: https://www.cnblogs.com/keitsi/p/5764785.html

  • MVP

    模型-视图-展示器(MVP)是MVC设计模式的一个衍生模式,它专注于提升展现逻辑.它来自于上个世纪九十年代早期的一个叫做Taligent的公司,当时他们正工作于一个基于C++ CommonPoint环境的模型.而MVC和MVP的目标都直指对整个多组件关注点的分离,它们之间有一些基础上的不同。 为了要做出总结的目的,我们将专注于最适合于基于Web架构的MVP版本。 模型,视图&展示器 MVP中的P代