- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用MVC模式开发Java应用程序利用MVC模式开发Java应用程序
利用MVC模式开发Java应用程序 作者:龚赤兵????来自:开放系统世界
Java是一种面向对象的语言,是实现面向对象编程的强大工具。我们在实际编程中,应该运用并发挥其最大效能。但是,要利用面向对象编程思想,自己独立开发出好的Java应用程序,特别是大、中型程序,并不是一件简单的事情。正是基于面向对象编程思想,人们将实际中的各种应用程序,进行了大量的分析、总结,从而归纳出许多标准的设计模式。将这些设计模式合理地运用到自己的实际项目中,可以最大限度地减少开发过程中出现的设计上的问题,确保项目高质量的如期完成。
MVC模式介绍
模型-视图-控制器(Model-View-Controller,MVC)模式就是为那些需要为同样的数据提供多个视图的应用程序而设计的。它很好地实现了数据层与表示层的分离,特别适用于开发与用户图形界面有关的应用程序,其示意图见图1。模式中基本结构定义为:
控制器 用来处理用户命令以及程序事件的;
模型 维护数据并提供数据访问方法;
视图 数据的显示。
MVC模式基本实现过程为:
1. 控制器(如Java中的main程序入口)要新建模型;
2. 控制器要新建一个或多个视图对象,并将它们与模型相关联;
3. 控制器改变模型的状态;
4. 当模型的状态改变时,模型将会自动刷新与之相关的视图。
图1 MVC模式基本结构
本文要实现的Java应用程序是当用户在图形化用户界面输入一个球体的半径时,程序将显示该球体的体积与表面积。我们首先利用基本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类必须实现接口Observer。正是由于实现了上述结构,当模型发生改变时(当控制器改变模型的状态),模型就会自动刷新与之相关的视图。其UML序列图可以表示为图3。
Model类Sphere,必须扩展Observable类,因为在Observable类中,方法addObserver()将视图与模型相关联,当模型状态改变时,通过方法notifyObservers()通知视图。其中实现MVC模式的关键代码为:
import java.util.Observable;
class Sphere extends Observable
{
....
public void setRadius(double r)
{
myRadius = 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.util.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.surfaceArea()));
}
......
}
SphereWindow类作为Controller,它主要新
您可能关注的文档
- 初中数学题库有理数实数1星题24(含解析)初中数学题库有理数实数1星题24(含解析).docx
- 初中物理力学基本知识要点集初中物理力学基本知识要点集.doc
- 初中数学竞赛试卷有答案版初中数学竞赛试卷有答案版.doc
- 初中物理动能、势能同步练习题初中物理动能、势能同步练习题.doc
- 初中物理声学复习测试题初中物理声学复习测试题.doc
- 初中物理复习策略的浅谈2012.2.7初中物理复习策略的浅谈2012.2.7.doc
- 初中物理基本填空初中物理基本填空.doc
- 初中物理中考实验模拟初中物理中考实验模拟.doc
- 初中物理总复习电学综合一初中物理总复习电学综合一.doc
- 初中物理探究性习题专题训练之研究初中物理探究性习题专题训练之研究.doc
最近下载
- 《工程项目管理》世纪大桥.docx
- 常见的颈椎病的诊断与鉴别诊断.ppt
- 深度学习及其应用(复旦大学)中国大学MOOC(慕课)章节测验试题(答案).pdf
- 安徽省合肥市庐江县2023-2024学年九年级上学期期末考试物理试题(含答案).docx VIP
- 基于机器学习的电商评论分析.docx
- 六年级上册数学北京版期末检测(B)(含答案).docx VIP
- 六年级上册数学北京版期末检测(A)(含答案).docx VIP
- 2023-2024学年安徽省合肥市庐江县九年级上学期期末考试物理试题.docx VIP
- 2023年CDN项目可行性研究方案.docx
- 北京丰台2024-2025学年数学六上期末综合测试试题含解析.doc VIP
文档评论(0)