预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

利用MVC模式开发Java应用程序作者:龚赤兵来自:开放系统世界 Java是一种面向对象的语言,是实现面向对象编程的强大工具。我们在实际编程中,应该运用并发挥其最大效能。但是,要利用面向对象编程思想,自己独立开发出好的Java应用程序,特别是大、中型程序,并不是一件简单的事情。正是基于面向对象编程思想,人们将实际中的各种应用程序,进行了大量的分析、总结,从而归纳出许多标准的设计模式。将这些设计模式合理地运用到自己的实际项目中,可以最大限度地减少开发过程中出现的设计上的问题,确保项目高质量的如期完成。 MVC模式介绍 模型-视图-控制器(Model-View-Controller,MVC)模式就是为那些需要为同样的数据提供多个视图的应用程序而设计的。它很好地实现了数据层与表示层的分离,特别适用于开发与用户图形界面有关的应用程序,其示意图见图1。模式中基本结构定义为: 控制器用来处理用户命令以及程序事件的; 模型维护数据并提供数据访问方法; 视图数据的显示。 MVC模式基本实现过程为: 1.控制器(如Java中的main程序入口)要新建模型; 2.控制器要新建一个或多个视图对象,并将它们与模型相关联; 3.控制器改变模型的状态; 4.当模型的状态改变时,模型将会自动刷新与之相关的视图。 图1MVC模式基本结构 本文要实现的Java应用程序是当用户在图形化用户界面输入一个球体的半径时,程序将显示该球体的体积与表面积。我们首先利用基本MVC模式实现以上程序,然后利用不同数量的模型、视图、控制器结构来扩展该程序。 基本MVC模式 该程序主要由三个类构成,分别为Sphere类、TextView类及SphereWindow类。其中Sphere类扮演Model的角色,TextView类为View角色,SphereWindow类为Controller角色。 Java通过专门的类Observable及Observer接口来实现MVC编程模式。其UML类图及MVC模式的实现方式见图2。 2MVC模式的UML类图 从图2中可以看出,Model类必须继承Observable类,View类必须实现接口Observer。正是由于实现了上述结构,当模型发生改变时(当控制器改变模型的状态),模型就会自动刷新与之相关的视图。其UML序列图可以表示为图3。 Model类Sphere,必须扩展Observable类,因为在Observable类中,方法addObserver()将视图与模型相关联,当模型状态改变时,通过方法notifyObservers()通知视图。其中实现MVC模式的关键代码为: importjava.util.Observable; classSphereextendsObservable { .... publicvoidsetRadius(doubler) { myRadius=r; setChanged();//Indicatesthatthemodelhaschanged notifyObservers(); } .... }图3MVC模式的UML序列图 View类的角色TextView类必须实现接口Observer,这意味着类TextView必须是implementsObserve,另外还需实现其中的方法update()。有了这个方法,当模型Sphere类的状态发生改变时,与模型相关联的视图中的update()方法就会自动被调用,从而实现视图的自动刷新。View类的关键代码如下: importjava.util.Observer; importjava.util.Observable; publicclassTextViewextendsJPanelimplementsObserver { ...... publicvoidupdate(Observableo,Objectarg) { Sphereballoon=(Sphere)o; radiusIn.setText(“”+f3.format(balloon.getRadius())); volumeOut.setText(“”+f3.format(balloon.volume())); surfAreaOut.setText(“”+f3.format(balloon.surfaceArea())); } ...... }SphereWindow类作为Controller,它主要新建Model与View,将view与Model相关联,并处理事件,其中的关键代码为: publicSphereWindow() { super(“Spheres:volumeandsurfacearea”); model=newSphere(0,0,100); TextViewview=newTextVie