发布于2020-11-26 15:39 阅读(841) 评论(0) 点赞(1) 收藏(3)
我发现在“真正的Swing生活”中最难掌握的设计模式之一是MVC模式。我浏览了该站点上的许多文章,讨论了该模式,但是我仍然不了解如何在我的Java Swing应用程序中利用该模式。
假设我有一个JFrame,其中包含一个表,几个文本字段和一些按钮。我可能会使用TableModel将JTable与基础数据模型“桥接”。但是,负责清除字段,验证字段,锁定字段以及按钮操作的所有函数通常都直接在JFrame中。但是,这不是将模式的Controller和View混合了吗?
据我所知,当查看JTable(和模型)时,我设法“正确地”实现了MVC模式,但是当我整体查看整个JFrame时,事情就变得混乱了。
我真的很想听听其他人对此的看法。当需要使用MVC模式向用户显示表格,几个字段和一些按钮时,如何处理?
我强烈推荐给MVC的书籍是Freeman和Freeman撰写的“ Head First Design Patterns”。他们对MVC有高度全面的解释。
简要总结
您就是用户-您与视图进行交互。视图是您进入模型的窗口。当您对视图执行某项操作(例如单击“播放”按钮)时,视图将告诉控制器您做了什么。处理该任务是控制器的工作。
控制器要求模型更改其状态。控制器执行您的动作并解释它们。如果单击按钮,那么控制器的工作就是弄清楚这意味着什么,以及如何基于该操作来操纵模型。
控制器也可能要求视图更改。当控制器从视图接收到一个动作时,它可能需要告诉视图作为结果进行更改。例如,控制器可以启用或禁用界面中的某些按钮或菜单项。
当状态改变时,模型会通知视图。当模型中的某些内容发生更改时,根据您执行的某些操作(例如单击按钮)或其他内部更改(例如播放列表中的下一首歌曲已开始),该模型会通知视图其状态已更改。
视图向模型询问状态。该视图直接从模型获取其显示的状态。例如,当模型通知视图新歌曲已开始播放时,该视图向模型请求歌曲名称并显示它。由于控制器请求对视图进行某些更改,因此视图可能还会向模型询问状态。
来源(如果您想知道“奶油控制器”是什么,请考虑一个奥利奥饼干,其中控制器是奶油中心,视图是顶部饼干,模型是底部饼干。)
嗯,如果您有兴趣,可以从这里下载有关MVC模式的相当有趣的歌曲!
Swing编程可能会遇到的一个问题是将SwingWorker和EventDispatch线程与MVC模式合并。根据您的程序,您的视图或控制器可能必须扩展SwingWorker并覆盖doInBackground()
放置资源密集型逻辑的方法。这可以很容易地与典型的MVC模式融合,这是Swing应用程序的典型特征。
编辑#1:
此外,将MVC视为各种模式的组合非常重要。例如,您的模型可以使用Observer模式实现(要求将View注册为模型的观察者),而控制器则可以使用Strategy模式。
编辑#2:
另外,我想特别回答您的问题。您应该在View中显示表格按钮等,这显然会实现一个ActionListener。在您的actionPerformed()
方法中,您检测到事件并将其发送到控制器中的相关方法(请记住,该视图包含对控制器的引用)。因此,当单击按钮时,视图将检测到事件,并将其发送到控制器的方法,控制器可能会直接要求视图禁用按钮或其他操作。接下来,控制器将与模型进行交互并修改模型(模型将主要具有getter和setter方法,以及一些其他方法来注册和通知观察者,依此类推)。修改模型后,它将立即调用已注册观察者的更新(在您的情况下为视图)。因此,视图现在将自行更新。
作者:黑洞官方问答小能手
链接:http://www.javaheidong.com/blog/article/10383/4c5572dcc31c39e6e38e/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!