Java用户界面 模型-视图-控制器(MVC)模式
Swing组件的MVC设计模式
在解决一个问题时,不需要从头做起,而是参考过去的经验,设计模式是一种方法,以一种结构化的形式展示了前人的经验。
前面提到过的Java中的AWT事件处理机制采用了“观察者”(Observer)模式。
本文要说的是Swing设计者采用的另一种著名的设计模式:模型-视图-控制器(model-view-controller)模式。
MVC设计模式
用户界面组件一般有三个要素:
1.内容,如按钮的状态(是否按下),或者文本域的文本。
2.外观, 颜色,大小等等。
3.行为,对输入事件的反应。
模型-视图-控制器(MVC)模式,不是用一个类完成所有的事情,而是实现三个独立的类:
模型(model):存储内容。
视图(view):显示内容。
控制器(controller):处理用户输入。
这个模式明确地规定了三个对象如何进行交互。模型存储内容,实现改变内容和查找内容的方法,它没有用户界面,模型是完全不可见的,显示存储在模型中的数据是视图的工作。
比如文本域的内容是容纳当前文本的字符串对象,与视图显示的内容并不一致——如果内容的长度大于文本域的显示长度,用户只能看到显示出来的那一部分。
模型-视图-控制器(model-view-controller)模式的一个优点是一个模型可以有多个视图,其中每个视图可以显示全部内容的不同部分或不同方面。当通过某一个视图的控制器对模型进行更新时,模型会把这种改变通知给所有视图,视图得到通知之后就会自动刷新。
控制器负责处理用户输入事件,例如点击鼠标和敲击键盘,然后决定是否把这些事件转化成对模型或视图的改变。
程序员使用Swing组件
程序员使用Swing组件通常不需要考虑它们的模型-视图-控制器体系结构。
每个用户界面元素都有一个包装器类(如JButton或JTextField)来保存模型和视图。
当需要查询内容时,包装器类会向模型询问并返回结果。当想改变视图时,包装器类会把此请求发给视图。然而有时候也需要直接同模型打交道。
MVC模式允许实现可插观感。每个按钮或者文本域的模型是独立于观感的。通过把底层模型与用户界面分离开,Swing设计者能够重用模型的代码,甚至在程序运行时对观感进行切换。
Swing按钮的MVC分析
对于大多数组件来说,模型类实现了名字结尾为Model的接口。例如,按钮类就实现了ButtonModel接口。
每个JButton对象存储一个按钮模型对象,可以用下列形式得到它的引用。
JButton button = new JButton("Blue"); ButtonModel model = button.getModel();
当使用Metal观感时,JButton类用BasicButtonUI类作为其视图,用ButtonUIListener类作为控制器。
一般来说,每个Swing组件都有一个相关的后缀为UI的视图对象,但并不是所有的Swing组件都有专门的控制器对象。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了