通过Java Swing看透MVC设计模(一)

原创 2004年08月24日 20:52:00

一个好的用户界面(GUI)的设计通常可以在现实世界找到相应的表现。例如,如果在您的面前摆放着一个类似于电脑键盘按键的一个简单的按钮,然而就是这么简单的一个按钮,我们就可以看出一个GUI设计的规则,它由两个主要的部分构成,一部分使得它具有了按钮应该具有的动作特性,例如可以被按下。另外一部分则负责它的表现,例如这个按钮是代表了A还是B。

看清楚这两点你就发现了一个很强大的设计方法,这种方法鼓励重用
reuse,而不是重新设计redesign。你发现按钮都有相同的机理,你只要在按钮的顶上喷上不同的字母便能制造出“不同”的按钮,而不用为了每个按钮而重新设计一份图纸。这大大减轻了设计工作的时间和难度。

如果您把上述设计思想应用到软件开发领域,那么取得相似的效果一点都不让人惊奇。一个在软件开发领域应用的非常广泛的技术Model/View/Controller(MVC)便是这种思想的一个实现。

这当然很不错,但是或许您又开始疑惑这和java基础类JFC(Java Foundation Class)中的用户界面设计部分(Swing)又有什么关系呢?好的,我来告诉你。

尽管MVC设计模式通常是用来设计整个用户界面(GUI)的,JFC的设计者们却独创性的把这种设计模式用来设计Swing中的单个的组件(Component),例如表格Jtable,树Jtree,组合下拉列表框JcomboBox等等。这些组件都有一个Model,一个View,一个Controller,而且,这些model,view,controller可以独立的改变,就是当组件正在被使用的时候也是如此。这种特性使得开发GUI界面的工具包显得非常的灵活。好,来吧,让我来告诉你它是如何工作的。

MVC设计模式

就象我刚才指出的一样,MVC设计模式把一个软件组件区分为三个不同的部分,model,view,controller。

303163.gif

Model是代表组件状态和低级行为的部分,它管理着自己的状态并且处理所有对状态的操作,model自己本身并不知道使用自己的view和controller是谁,系统维护着它和view之间的关系,当model发生了改变系统还负责通知相应的view。

View代表了管理model所含有的数据的一个视觉上的呈现。一个Model可以有一个以上的View,但是Swing中却很少有这样的情况。

Controller管理着model和用户之间的交互的控制。它提供了一些方法去处理当model的状态发生了变化时的情况。

使用键盘上的按钮的例子来说明一下:Model就是按钮的整个机械装置,View/Controller就是按钮的表面部分。

下面的图解释了如何把一个JFC开发的用户界面分为model,view,controller,注意,view/Controller被合并到了一起,这是MVC设计模式通常的用法,它们提供了组件的用户界面(UI)。

303165.gif

用Button的例子详细说明

为了更好的理解MVC设计模式和Swing用户界面组件之间的关系,让我们更加深入的进行分析。我将采用最常见的组件button来说明。我们从model来开始。

Model

一个按钮的model所应该具备的行为由一个接口ButtonModel来完成。一个按钮model实例封装了其内部的状态,并且定义了按钮的行为。它的所有方法可以分为四类:
1、查询内部状态
2、操作内部状态
3、添加和删除事件监听器
4、发生事件

其他的用户界面组件有它们各自的与组件相关的Model,但是所有的组件Model都提供这四类方法。

View & Controller

上面的图中讲述一个按钮的view/controller由一个接口ButtonUI完成。如果一个类实现了这个接口,那么它将会负责创建一个用户界面,处理用户的操作。它的所有方法可以被分为三大类:
1、绘制Paint
2、返回几何类型的信息
3、处理AWT事件

其他用户界面组件有他们自己的组件相关的View/Controller,但是他们都提供上述三类方法。

程序员通常并不会直接和model以及view/controller打交道,他们通常隐藏于那些继承自java.awt.Component的组件里面了,这些组件就像胶水一样把MVC三者合三为一。也正是由于这些继承的组件对象,一个程序员可以很方便的混合使用Swing组件和AWT组件,然后,我们知道,Swing组件有很多都是直接继承自相应的AWT组件,它能提供比AWT组件更加方便易用的功能,所以通常情况下,我们没有必要混合使用两者。

一个实例

现在我们已经明白了Java类与MVC各个部分的对应关系,我们可以更加深入一点去分析问题了。下面我们将要讲述一个小型的使用MVC模式开发的例子。因为JFC十分的复杂,我只能把我的例子局限于一个用户界面组件里面(如果你猜是一个按钮的例子,那么你对了!)

让我们来看看这个例子的所有部分吧。

Button类

最显而易见的开始的地方就是代表了按钮组件本省的代码,因为这个类是大部分程序员会接触的。

就像我前面提到的,按钮用户界面组件类实际上就是model和view/controller的之间的黏合剂。每个按钮组件都和一个model以及一个controller关联,model定义了按钮的行为,而view/controller定义了按钮的表现。而应用程序可以在任何事件改变这些关联。让我们看看得以实现此功能的代码。



在进入下一节之前,你应该多花一些时间来仔细阅读一下Button类的源代码。

通过Java Swing看透MVC设计模式

转自:点击打开链接 一个好的用户界面(GUI)的设计通常可以在现实世界找到相应的表现。例如,如果在您的面前摆放着一个类似于电脑键盘按键的一个简单的按钮,然而就是这么简单的一个按钮,我们就...
  • CTO_51
  • CTO_51
  • 2013年06月01日 19:48
  • 917

通过Java Swing看透MVC设计模式

一个好的用户界面(GUI)的设计通常可以在现实世界找到相应的表现。例如,如果在您的面前摆放着一个类似于电脑键盘按键的一个简单的按钮,然而就是这么简单的一个按钮,我们就可以看出一个GUI设计的规则,它由...
  • huoyingjianshen
  • huoyingjianshen
  • 2013年06月10日 09:37
  • 509

读<看透Spring MVC 源代码分析与实践>Tomcat笔记

Servlet->GenericServlet->HttpServlet Tomcat整体结构: Server    Service 1    Service 2    ... ...
  • achuo
  • achuo
  • 2016年01月11日 14:21
  • 1178

2016书单总结--看透SpringMvc源代码分析与实践-概述

2016书单总结–看透SpringMvc源代码分析与实践-概述主要从Servlet、Tomcat、SpringMvc启动、SpringMvc组件几个方面进行阐述Servlet相关知识点(3个主要类) ...
  • undergrowth
  • undergrowth
  • 2017年01月24日 00:09
  • 1213

java之MVC设计模式浅析

Java之MVC设计模式使用 一、设计模式简介: 在学习MVC设计模式之前,先简单说一下什么是代码的设计模式。 官方的说法是:设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经...
  • jzc251105671l
  • jzc251105671l
  • 2017年07月13日 22:03
  • 51

看透 Spring MVC 源代码分析与实践 —— Spring MVC 组件分析

由于星期一接到面试通知,和面试官约好了星期四面试,所以这几天没更新完这系列的文章,面完试后立马就把这个解决掉。通过这次面试,也让我懂得了很多,知道了自己的一些不足之处,后面还要继续下功夫好好的深入复习...
  • zbl1146556298
  • zbl1146556298
  • 2017年11月19日 12:05
  • 38

读<看透Spring MVC 源代码分析与实践>Tomcat笔记

Servlet->GenericServlet->HttpServlet Tomcat整体结构: Server    Service 1    Service 2    ...    Servi...
  • guolong1983811
  • guolong1983811
  • 2016年01月06日 17:20
  • 1829

JAVA之Swing设计

import java.awt.BorderLayout; import java.awt.Container; import java.awt.FlowLayout; import java.awt...
  • xinwen1995
  • xinwen1995
  • 2016年07月18日 22:54
  • 349

MVC设计模式 的概念

MVC设计模式 的概念打从笔者在csdn搜索“MVC”,结果出现了标题主旨不同的几种有关“MVC”的博文之后,笔者就知道了MVC会有几个重定义。在笔者阅览过这些博文之后,可以总结出:在我们程序员所在领...
  • yasukusury
  • yasukusury
  • 2017年03月18日 13:46
  • 112

java Swing框架应用,计算器的设计实现

本计算器的实现最基本的四则运算及
  • superYZG
  • superYZG
  • 2014年08月07日 14:02
  • 989
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过Java Swing看透MVC设计模(一)
举报原因:
原因补充:

(最多只允许输入30个字)