Java 需要帮助理解MVC设计模式吗

Java 需要帮助理解MVC设计模式吗,java,model-view-controller,design-patterns,Java,Model View Controller,Design Patterns,我试图在java中找到一个MVC设计模式的ood示例 这是我从阅读中了解到的,如果我错了,请纠正我: 我有一个模型部分,它是程序背后的逻辑,假设我们有一个电话簿,那么从数组中添加和删除联系人就是模型 Gui是一个视图,它包含一些按钮,单击这些按钮,模型就会发生变化 我想了解的是,控制器是什么,是ActionListeners吗?如何在实践中分离这些模块 谢谢控制器通常是MVC中最难定义的部分。在您的示例中,是位加载和操作电话簿,也是位选择要使用的视图。我使用MVC很长时间了,发现它是一种处理软件

我试图在java中找到一个MVC设计模式的ood示例

这是我从阅读中了解到的,如果我错了,请纠正我:

我有一个模型部分,它是程序背后的逻辑,假设我们有一个电话簿,那么从数组中添加和删除联系人就是模型

Gui是一个视图,它包含一些按钮,单击这些按钮,模型就会发生变化

我想了解的是,控制器是什么,是ActionListeners吗?如何在实践中分离这些模块


谢谢

控制器通常是MVC中最难定义的部分。在您的示例中,是位加载和操作电话簿,也是位选择要使用的视图。

我使用MVC很长时间了,发现它是一种处理软件设计的奇妙机制。我的建议是,在你学习的时候,首先让一切都成为一个控制器。换句话说,创建一个类,该类的成员包含状态(模型)以及显示和操作该状态(视图)的成员。使类的函数从视图中获取输入,修改数据,然后更新视图(控制器)

这显然没有体现设计模式想要的分离,但它将帮助您快速了解什么是清晰视图组件,什么是清晰模型组件。然后花一些时间将独立的模型对象(这是最简单的)和以后的独立视图对象分离为单独的文件/对象

在您为一两个项目这样做之后,分离将变得更加自然和明显,当您开始新的项目时,您将在开始编写代码(设计阶段)之前知道哪些事情会发生


从个人经验来看,我认为如果你试图在没有实际开发经验的情况下对所有事情进行分类,那么你更容易思考过度,做太多的工作。你会发现,如果你花一些时间以一种自然的方式写一个项目,然后在进行过程中或事后将事情分解,这会更有意义。

在你的例子中,这两者似乎是一致的

但是,以下面的场景为例。
工厂范围内的内部联系簿。
在这种情况下(假设如此),大多数用户无法将联系人添加到通讯簿中。
只有人力资源部可以向列表中添加新联系人(=员工)。
我们现在有3段真正独立的代码:

  • 图形用户界面(普通员工可以看到)
    这是一个简单的列表,始终显示员工/邮件地址的完整列表。
    查看列表的员工完全无法控制列表-他/她只是查看列表。
    员工可以更改列表的外观(例如按姓氏排序、更改字体)。
    任何此类变更都是观众的内部变更,不由模型或控制器记录或监督
  • 控制器(仅人力资源部可访问)
    这可以是另一个GUI,但具有对列表状态进行更改的能力(例如添加/删除员工)。
    如果你想把它发挥到极致,那就假设它是一个贝壳状的窗户。
    当人力资源员工希望添加新员工时,他/她在shell中键入:
    “加上‘约翰·史密斯’johns2@internalMail"
  • 模型-保存状态并监督状态更改。
    正如你所描述的。它执行流程的必要逻辑。
    例如,它不会添加已添加的员工,以此类推
  • 您的场景的“问题”在于,它可能不是MVC的经典场景。
    MVC意味着反对称。也就是说,并非所有的“观众”都是相同的,有些是“特殊的”/“管理员”,与“普通”观众相比有额外的好处


    希望它能澄清问题。

    要特别评论你发布的内容,你说得不太对。数组和其中的数据是模型(即程序的状态)。你可能认为这个模型与时间无关,它只是在任何给定的时间里的样子。从阵列中添加和删除数据并随时间了解阵列状态的代码是控制器。请检查此项,这是错误的。在MVC中,所有应用程序用户只能看到视图。将有多个视图,人力资源部门可以访问一些其他视图,表示人力资源部门可以访问的控制器不是MVC。