利用MVC模式开发Java应用程序_第1页
利用MVC模式开发Java应用程序_第2页
利用MVC模式开发Java应用程序_第3页
利用MVC模式开发Java应用程序_第4页
利用MVC模式开发Java应用程序_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、利用MVC模式开发Java应用程序作者:龚赤兵来自:开放系统世界Java是一种面向对象的语言,是实现面向对象编程的强大工具。我们在实际编程中,应该运用并发挥其最大效能。但是,要利用面向对象编程思想,自己独立开发出好的Java应用程序,特别是大、中型程序,并不是一件简单的事情。正是基于面向对象编程思想,人们将实际中的各种应用程序,进行了大量的分析、总结,从而归纳出许多标准的设计模式。将这些设计模式合理地运用到自己的实际项目中,可以最大限度地减少开发过程中出现的设计上的问题,确保项目高质量的如期完成。 MVC模式介绍 模型视图控制器(Model-View-Controller,MVC)模式就是为那

2、些需要为同样的数据提供多个视图的应用程序而设计的。它很好地实现了数据层与表示层的分离,特别适用于开发与用户图形界面有关的应用程序,其示意图见图1。模式中基本结构定义为: 控制器 用来处理用户命令以及程序事件的; 模型 维护数据并提供数据访问方法; 视图 数据的显示。 MVC模式基本实现过程为: 1. 控制器(如Java中的main程序入口)要新建模型; 2. 控制器要新建一个或多个视图对象,并将它们与模型相关联; 3. 控制器改变模型的状态; 4. 当模型的状态改变时,模型将会自动刷新与之相关的视图。图1 MVC模式基本结构 本文要实现的应用程序是当用户在图形化用户界面输入一个球体的半径时,程

3、序将显示该球体的体积与表面积。我们首先利用基本MVC模式实现以上程序,然后利用不同数量的模型、视图、控制器结构来扩展该程序。 基本MVC模式 该程序主要由三个类构成,分别为Sphere类、TextView类及SphereWindow类。其中Sphere类扮演Model的角色,TextView类为View角色,SphereWindow类为Controller角色。 Java通过专门的类Observable及Observer接口来实现MVC编程模式。其UML类图及MVC模式的实现方式见图2。图2 MVC模式的UML类图 从图2中可以看出,Model类必须继承Observable类,View类必须实

4、现接口Observer。正是由于实现了上述结构,当模型发生改变时(当控制器改变模型的状态),模型就会自动刷新与之相关的视图。其UML序列图可以表示为图3。 Model类Sphere,必须扩展Observable类,因为在Observable类中,方法addObserver()将视图与模型相关联,当模型状态改变时,通过方法notifyObservers()通知视图。其中实现MVC模式的关键代码为:import java.util.Observable;class Sphere extends Observable.public void setRadius(double r) myRadius

5、= r; setChanged(); / Indicates that the model has changed notifyObservers(); .图3 MVC模式的UML序列图 View类的角色TextView类必须实现接口Observer,这意味着类TextView必须是implements Observe,另外还需实现其中的方法update()。有了这个方法,当模型Sphere类的状态发生改变时,与模型相关联的视图中的update()方法就会自动被调用,从而实现视图的自动刷新。View类的关键代码如下:import java.util.Observer;import java.u

6、til.Observable;public class TextView extends JPanel implements Observer. public void update(Observable o, Object arg) Sphere balloon = (Sphere)o; radiusIn.setText(“ ”+f3.format(balloon.getRadius(); volumeOut.setText(“ ”+f3.format(balloon.volume(); surfAreaOut.setText(“ ” + f3.format(balloon.surfaceA

7、rea(); .SphereWindow类作为Controller,它主要新建Model与View,将view与Model相关联,并处理事件,其中的关键代码为:public SphereWindow() super(“Spheres: volume and surface area”); model = new Sphere(0, 0, 100); TextView view = new TextView(); model.addObserver(view); view.update(model, null); view.addActionListener(this); Container c

8、 = getContentPane(); c.add(view);public void actionPerformed(ActionEvent e) JTextField t = (JTextField)e.getSource(); double r = Double.parseDouble(t.getText(); model.setRadius(r);该程序是通过Java中的MVC模式编写的,具有极其良好的可扩展性。它可以轻松实现以下功能: 1. 实现一个模型的多个视图; 2. 采用多个控制器; 3. 当模型改变时,所有视图将自动刷新; 4. 所有的控制器将相互独立工作。 这就是Java

9、编程模式的好处,只需在以前的程序上稍作修改或增加新的类,即可轻松增加许多程序功能。以前开发的许多类可以重用,而程序结构根本不再需要改变,各类之间相互独立,便于团体开发,提高开发效率。 一个模型、两个视图和一个控制器 下面我们讨论如何实现一个模型、两个视图和一个控制器的程序。当用户在图形化用户界面输入一个球体的半径,程序除显示该球体的体积与表面积外,还将图形化显示该球体。该程序的4个类之间的示意图可见图4。图4一个模型、两个视图和一个控制器的基本结构 其中Model类及View1类根本不需要改变,与前面的完全一样,这就是面向对象编程的好处。对于Controller中的SphereWindows类

10、,只需要增加另一个视图,并与Model发生关联即可。其关键实现代码为:public SphereWindow() super(“Spheres: volume and surface area”); model = new Sphere(0, 0, 100); TextView tView = new TextView(); model.addObserver(tView); tView.addActionListener(this); tView.update(model, null); GraphicsView gView = new GraphicsView(); model.addOb

11、server(gView); gView.update(model, null); Container c = getContentPane(); c.setLayout(new GridLayout(1, 2); c.add(tView); c.add(gView); 其程序输出结果见图5。图5 输出结果 一个模型、两个视图和两个控制器 在上面的程序中,我们只能通过键盘输入球体半径,现在我们修改以上程序,利用鼠标放大、缩小右边的球体图形及可改变球体的半径,从而获得球体半径的输入。 此时的MCV模式为一个模型、两个视图和两个控制器,其结构可以见图6,其UML类图可以表示为图7。 其中Spher

12、e、TextView与GraphicsView类与前面完全一样。在主程序SphereWindows中,该类这时不是直接作为Controller,它控制Controller1与Controller2的新建。该程序的关键代码为:public SphereWindow() super(“Spheres: volume and surface area”); Sphere model = new Sphere(0, 0, 100); TextController tController = new TextController(model); GraphicsController gController = new GraphicsController(model); Container c = getContentPane(); c.setLayout(new GridLayout(1, 2); c.add(tController.getView(); c.add(gControll

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论