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组件都有专门的控制器对象。

posted @ 2012-11-06 21:19  圣骑士wind  阅读(6898)  评论(0编辑  收藏  举报