`
lzth
  • 浏览: 138424 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Swing MVC 结构

    博客分类:
  • Java
阅读更多
MVC 是 Model-View-Controller 的简称,即模型—视图—控制器。这个模式最早是应用在 Xerox PARC 的 SmallTakl 语言上,至今已经得到广泛的认可。

  下面就对 Java Swing MVC 的概念进行如下说明。


  ·模型(Model):是存储 Swing 组件数据的地方,例如 JTable 的 Model 会存储表格上的所有数据。负责维护数据。模型通常提供访问和修改数据的方法。当模型变化时,这个模型还把事件发送给已登记的视图,对此,视图根据模型的变化来更新自己。
  ·视图(View):指 Swing 组件的外观显示效果。负责提供模型的部分数据的可视图。
  ·控制器(Controller):响应用户在 Swing 组件上的具体操作,为视图处理事件。鼠标和动作监听器等 AWT 和 Swing 监听器都是 MVC 控制器。

  图1显示了这几个模块各自的功能及它们之间的相互关系。

MVC 需要很强的设计功能。分述如下:

  首先,应当把多个视图和控制器插入到单个模型中,这是 Swing 插入式界面样式的基础。

  其次,当模型改变时,模型的视图能够自动地得到通知。在一个视图中改变模型的属性,将导致模型其他的视图也随之更新。

  最后,由于模型独立于视图,所以,不需要修改模型来适应新类型的视图或控制器。

  (1)插入式视图和控制器

  Swing 容器把定位它们所包含的组件及确定这些组件大小的工作委托给一个布局管理器。布局管理器封装了布局组件的策略。例如,FlowLayout 布局管理器的策略是用组件的首选大小来安排组件的大小,并以从左到右、从上到下的顺序定位组件。

  封装的策略使它们是可插入的。例如,布局管理器可以在编译时,也可以在运行时插入到容器中。

  通过封装在视图中可视地表示数据的策略及封装控制器中处理事件的策略,MVC 体系结构提供了可插入视图和控制器。就像布局管理器可以插入到 AWT 和 Swing 组件中一样,视图和控制器也可以插入到模型中。

  (2)视图更新

  Swing (和 AWT )事件由向事件源登记了的事件监听器来处理。例如,按钮的激活事件由一个对象所处理,这个对象实现 ActionListener 接口,并且通过调用这个按钮的 addActionListener 方法向这个按钮进行了登记。

  事件源和监听器是 Observer 样式的一个例子,Observer 样式允许单个对象在所观察的对象修改时通知许多观察器。Observer 样式需要在被观察对象与它的观察器之间有一个很小的接口区。例如,上面描述的动作监听器可以是任何类型的对象,只要它实现 ActionListener 接口。而且,按钮除了知道如何和何时通过观察器之外,对观察器一无所知。

  当模型改变时,MVC 体系结构使用 Observer 样式来通知视图。模型可以有许多视图,所有的视图通常都用模型的通知来同步。而且,任何类型的视图都可以在不使模型本身有任务变化的情况下观察一个模型。

  事件由控制器处理,控制器根据事件的类型来改变模型一个或多个视图。

  模型维护一个视图列表,这些视图为获得模型变化通知已经向模型登记过了。当模型发生变化时,该模型通知已向此模型登记的每个视图。视图通常从该模型中获得信息以进一步澄清这个事件,接着再更新它们自己。

  MVC 的优点是:很久以来,MVC 体系结构一直是建立在 Smalltalk 应用程序的基础上。面向对象开发的最基础的方面是确认对象并在类中封装对象。例如,一个工资册应用程序可能确认雇员、工资等对象。在类中封装对象允许在对象间建立松散的联系,这样就减少了依赖性,增加了灵活性和再使用性。

  MVC 封装了3个在大多数图形应用程序都存在的通用对象:模型、视图和控制器。通过封装其他体系结构的优秀特性,MVC 应用程序比相应的传统应用程序更灵活和更具有使用性。

  Swing MVC 是典型 MVC 的专业版本,其设计目的是支持插入式界面模式而不是通用应用程序。Swing 轻量组件由下面的对象组成:


  ·一个维护组件的数据模型。
  ·UI 代表,它是一个带事件处理监听器的视图。
  ·一个扩展 JComponent 的组件。

  Swing 模型可以直接对应典型的MVC模型。这两个模型都维护数据并提供数据访问方法,当它们发生变化时,它们会通知监听器。

  Swing 组件把它们的界面样式交给一个UI代表来处理。UI代表与典型的MVC中的视图控制器组合相对应。从现在开始,控制器又称做监听器。Swing监听器通常作为UI代表的内部类来实现,并且根据组件所表现的复杂程序,组件代表可以有许多处理事件的内部类监听器。

  • 大小: 4.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics