MVC和Observer
MVC:
“模型-视图-控制器(Model-View-Controller,MVC)结构是为那些需要为同样的数据提供多个视图的应用程序而设计的,它很好的实现了数据层与表示层的分离。例如下图中的例子:
[img]http://www.cs.nyu.edu/courses/spring99/V22.0480-001/lectures/images/l14_im2.JPG[/img]
我们看到,图中的几组数据以不同的形式(View)表现出来,一个是表格样式,一个是图形样式。
MVC把这种应用程序分为三种对象类型:
模型:维护数据并提供数据访问方法。
视图:给制模型的部分数据或所有数据的可视图。
控制器:处理事件.
以下是典型的MVC通信方式,
[img]http://www.javable.com/columns/serv_side/workshop/11/1.gif[/img]
[这个贴子最后由eclipse在 2002/09/03 03:49pm 编辑]
设计模式:实战MVC模式 turbochen(原作)
关键字 design pattern,mvc,observer,java
内容:
1.MVC
2.Observer接口
3.模型Model
4.视图View
5.控制器Controller
6.运行程序
--------------------------------------------------------------------------------
MVC
“模型-视图-控制器(Model-View-Controller,MVC)结构是为那些需要为同样的数据提供多个视图的应用程序而设计的,它很好的实现了数据层与表示层的分离。例如下图中的例子:
[img]http://www.cs.nyu.edu/courses/spring99/V22.0480-001/lectures/images/l14_im2.JPG[/img]
我们看到,图中的几组数据以不同的形式(View)表现出来,一个是表格样式,一个是图形样式。
MVC把这种应用程序分为三种对象类型:
模型:维护数据并提供数据访问方法。
视图:给制模型的部分数据或所有数据的可视图。
控制器:处理事件.
以下是典型的MVC通信方式,
[img]http://www.javable.com/columns/serv_side/workshop/11/1.gif[/img]
事件由控制器来处理,控制器接收用户事件,并根据事件的类型来改变模型。
视图事先会在模型中登记,当模型数据发生改变时,马上通知已向此模型登记的每个视图。
视图从模取得最新的数据并刷新自己.
要实现MVC,最重要的一个环节是使用Design Pattern中的Observer模式。Observer模式允许某个对象在所观察的对象发生修改时通知多个观察者(Observer).
下面我们就以实例来讲解如何用Obserer模式实现MVC的程序结构。在我的例子中,我要实现一个学生年龄显示的例子。分别用清单和图形的方式显示每个学生的年龄。当年龄改变时,自动更新显示。
Observer接口
为了实现观察的对象发生修改时通知多个观察者,通常要在被观察者与观察者之间有一个小的接口,如下:
/* file: Observer.java */
这个接口中有一个dataUpdate(Model model)方法,只要实现了这个接口对象,就成了一个观察者。
模型Model
再来建立一个数据模型。在我的例子中,先建立了一个数据对象:
/* file: Data.java */
现在来建立一个Model:
/* file: Model.java */
这个模型提供各种数据访问的方法。并提供一个changeModel(Model model)方法供Controller访问。还提供一个registerObserver(Observer o)方法,用来向Model中登记观察者Observer。
视图View
我们要实现一个清单显示样式的视图View1和一个图形方式显示的视图View2,并让它们实现Observer接口,以便当Model数据改变时,自动刷新自己.
/* file: View1.java */
控制器Controller
好了,MVC中的Model,Observer都建立好了,我们最后来做一个Controller:
运行程序
各位可以将这些代码各自存为相应的源文件,执行以下命令编译
javac Controller.java
运行
java Controller.class
就可以看到程序执行的效果,
你可以试着改变两个学生的年龄,按一下Update按钮,相应的视图就更新了。怎么样,体验到了MVC结构给程序带来的方便性了吧?;)
<淘宝热门商品:
来源:程序员网
|
|
|
|
|
|
|
0 Responses to "MVC和Observer"
发表评论