




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
利用MVC模式开发Java应用程序ProjectHomework利用MVC模式开发Java应用程序ProjectHomew1
MVC模式介绍
模型-视图-控制器(Model-View-Controller,MVC)
模式将一个交互式应用程序分成3个组件.模型视图控制器视图和控制器组成了用户接口。变更-传播机制保证了模型和用户接口之间的一致性。MVC模式介绍模型-视图-控制器(Model-View-2解决方案〔1〕将应用程序分成三个局部:处理、输出和输入模型组件:封装了内核数据和功能。模型独立于特定输出表示或者输入方式。视图组件向用户显示信息。视图从模型获得数据。一个模型可能有多个视图。每个视图有一个相关的控制器组件。控制器组件承受输入,通常将鼠标Move、Click或键盘Type等用户输入翻译成为对视图或者模型的效劳器请求。用户仅仅通过控制器与系统交互。解决方案〔1〕将应用程序分成三个局部:处理、输出和输入3MVCSolutionDatamodel
DatadisplayUserinputModelViewControllerUI:Data:manipulaterefreshrefresheventsMVCSolutionDatamodel
Datadi4解决方案〔2〕一个模型可以有多个视图。如果用户通过一个视图的控制器改变了模型,那么依赖于该数据的其他视图也应该反映出这样的变化。一旦模型的数据发生了变化,模型需要通知所有相关的视图做出相应的变化。这样的方式可以通过观察者设计模式完成。解决方案〔2〕一个模型可以有多个视图。5动态特征〔场景Ⅰ〕场景Ⅰ用户输入导致模型变化,并触发变更-传递机制。控制器承受到事件,解释事件并且启动模型的效劳过程。模型执行相应的过程,并导致内部状态的变化。模型调用其更新过程,向所有登记请求了变更-传播机制的视图和控制器发出通知。每个视图从模型中读取新数据并且重新显示。每个控制器修改自己的行为,比方禁用某个功能。最初的控制器恢复控制并从事件处理过程返回。动态特征〔场景Ⅰ〕场景Ⅰ用户输入导致模型变化,并触发变更-6动态特征〔场景Ⅰ〕用户输入导致模型变化,并触发变更-传递机制的过程动态特征〔场景Ⅰ〕用户输入导致模型变化,并触发变更-传递机制7动态特征〔场景Ⅱ〕场景Ⅱ初始化过程创立模型实例,并初始化其数据。创立视图对象,并用对模型的引用作为初始化参数之一。视图通过调用附属过程支持变更-传递机制。视图创立控制器,此时将模型和视图的引用作为参数传递给控制器初始化过程。控制器通过调用附属过程来支持变更-传递机制。初始化完成,应用程序开场处理事件。(初始化过程可根据情况调整)动态特征〔场景Ⅱ〕场景Ⅱ初始化过程8动态特征〔场景Ⅱ〕MVC系统的初始化过程Mainprog.ModelViewControllerinitializeviewmodel,viewstartModelattachmakeControllerinitializeattachcontroller动态特征〔场景Ⅱ〕MVC系统的初始化过程Mainprog9构造〔1〕模型组件包含了应用程序的功能内核。封装了相应的数据并输出执行特定应用程序处理的过程。控制器代表用户调用这些过程。模型也提供访问它封装的数据的函数,这些函数可以由视图组件使用。构造〔1〕模型组件包含了应用程序的功能内核。10构造〔2〕变更-传播机制维护了一个模型中相依组件的注册表。所有视图还有一些控制器在这个表中登记了对变更通知的需求。模型状态的改变将触发变更-传播机制。每个在表中登记的视图和控制器都会收到变更通知。变更-传播机制是模型与视图控制器之间的唯一连接。构造〔2〕变更-传播机制11构造〔3〕视图组件向用户呈现信息不同的视图用不同的方法呈现信息。每个组件都有一个更新函数。这个函数被模型变更通知激活。这个函数被激活〔此时模型已经改变〕后,将使得视图重新和模型一致。在初始化阶段,视图向模型登记请求变更通知。每个视图将创立一个适宜的控制器。构造〔3〕视图组件向用户呈现信息12构造〔4〕控制器组件承受作为事件的用户输入。事件如何发送到控制器由用户界面平台决定。事件被翻译成为对模型或者视图的请求。如果控制器的行为依赖于模型的状态,那么控制器也需要向模型登记请求变更通知。例如:模型的改变使一个菜单输入能用或禁用时。构造〔4〕控制器组件承受作为事件的用户输入。13构造〔5〕Figure2ClassdiagramofPoliticalSelection构造〔5〕Figure2Classdiagramof14MVC模式Java实现过程1.控制器〔如Java中的main程序入口〕要新建模型;
2.控制器要新建一个或多个视图对象,并将它们与模型相关联;
3.控制器改变模型的状态;
4.当模型的状态改变时,模型将会自动刷新与之相关的视图MVC模式Java实现过程1.控制器〔如Java中的ma15MVC模式根本构造
ControllerModelViewMVC模式根本构造
ControllerModelVi16
系统功能本文要实现的Java应用程序是当用户在图形化用户界面输入一个球体的半径时,程序将显示该球体的体积与外表积。我们首先利用根本MVC模式实现以上程序,然后利用不同数量的模型、视图、控制器构造来扩展该程序。该程序主要由三个类构成:Sphere类扮演Model的角色TextView类为View角色SphereWindow类为Controller角色。
Java通过专门的类Observable及Observer接口来实现MVC编程模式。系统功能本文要实现的Java应用程序是当用户在图形化用户界17MVC模式的UML类图MVC模式的UML类图18具体实现Model类Sphere,必须扩展Observable类,在Observable类中,方法addObserver()将视图与模型相关联当模型状态改变时,通过方法notifyObservers()通知视图。其中实现MVC模式的关键代码为:具体实现Model类Sphere,必须扩展Observabl19代码importjava.util.Observable;classSphereextendsObservable{....publicvoidsetRadius(doubler){myRadius=r;setChanged();//IndicatesthatthemodelhaschangednotifyObservers();}....}代码importjava.util.Observable;20MVC模式的UML序列图MVC模式的UML序列图21importjava.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()));}......}importjava.util.Observer;22具体实现
SphereWindow类作为Controller,它主要新建Model与View,将view与Model相关联,并处理事件,其中的关键代码为:具体实现SphereWindow类作为Controller23publicSphereWindow(){super(“Spheres:volumeandsurfacearea〞);model=newSphere(0,0,100);TextViewview=newTextView();model.addObserver(view);view.update(model,null);view.addActionListener(this);Containerc=getContentPane();c.add(view);}publicvoidactionPerformed(ActionEvente){JTextFieldt=(JTextField)e.getSource();doubler=Double.parseDouble(t.getText());model.setRadius(r);}publicSphereWindow()24一个模型、两个视图和一个控制器
一个模型、两个视图和一个控制器25程序输出结果程序输出结果26publicSphereWindow(){super(“Spheres:volumeandsurfacearea〞);model=newSphere(0,0,100);TextViewtView=newTextView();model.addObserver(tView);tView.addActionListener(this);tView.update(model,null);GraphicsViewgView=newGraphicsView();model.addObserver(gView);gView.update(model,null);Containerc=getContentPane();c.setLayout(newGridLayout(1,2));c.add(tView);c.add(gView);}publicSphereWindow()27一个模型、两个视图和两个控制器一个模型、两个视图和两个控制器28
一个模型、两个视图和两个控制器
publicSphereWindow(){super(“Spheres:volumeandsurfacearea〞);Spheremodel=newSphere(0,0,100);TextControllertController=newTextController(model);GraphicsControllergController=newGraphicsController(model);Containerc=getContentPane();c.setLayout(newGridLayout(1,2));c.add(tController.getView());c.add(gController.getView());}一个模型、两个视图和两个控制器publicSphere29UML类图UML类图30Project
One一个人一个Group;实现一个模型、两个视图和至少两个控制器的功能,即具有课件slide21所具有的程序界面及其功能.提交要求:1、需求文档、设计文档〔包括所编制程序的UML用例图、类图、顺序图〕、测试文档;2、源代码3、要求将程序打包成可运行的jar包〔Java语言开发〕;或可执行的.exe文件〔其它语言开发〕。ProjectOne一个人一个Group;31小结从上面介绍可以看出,通过MVC模式实现与图形用户化界面相关的应用程序具有极其良好的可扩展性,是Java面向对象编程的未来方向。小结从上面介绍可以看出,通过MVC模式实现与图形用户化界面相32利用MVC模式开发Java应用程序ProjectHomework利用MVC模式开发Java应用程序ProjectHomew33
MVC模式介绍
模型-视图-控制器(Model-View-Controller,MVC)
模式将一个交互式应用程序分成3个组件.模型视图控制器视图和控制器组成了用户接口。变更-传播机制保证了模型和用户接口之间的一致性。MVC模式介绍模型-视图-控制器(Model-View-34解决方案〔1〕将应用程序分成三个局部:处理、输出和输入模型组件:封装了内核数据和功能。模型独立于特定输出表示或者输入方式。视图组件向用户显示信息。视图从模型获得数据。一个模型可能有多个视图。每个视图有一个相关的控制器组件。控制器组件承受输入,通常将鼠标Move、Click或键盘Type等用户输入翻译成为对视图或者模型的效劳器请求。用户仅仅通过控制器与系统交互。解决方案〔1〕将应用程序分成三个局部:处理、输出和输入35MVCSolutionDatamodel
DatadisplayUserinputModelViewControllerUI:Data:manipulaterefreshrefresheventsMVCSolutionDatamodel
Datadi36解决方案〔2〕一个模型可以有多个视图。如果用户通过一个视图的控制器改变了模型,那么依赖于该数据的其他视图也应该反映出这样的变化。一旦模型的数据发生了变化,模型需要通知所有相关的视图做出相应的变化。这样的方式可以通过观察者设计模式完成。解决方案〔2〕一个模型可以有多个视图。37动态特征〔场景Ⅰ〕场景Ⅰ用户输入导致模型变化,并触发变更-传递机制。控制器承受到事件,解释事件并且启动模型的效劳过程。模型执行相应的过程,并导致内部状态的变化。模型调用其更新过程,向所有登记请求了变更-传播机制的视图和控制器发出通知。每个视图从模型中读取新数据并且重新显示。每个控制器修改自己的行为,比方禁用某个功能。最初的控制器恢复控制并从事件处理过程返回。动态特征〔场景Ⅰ〕场景Ⅰ用户输入导致模型变化,并触发变更-38动态特征〔场景Ⅰ〕用户输入导致模型变化,并触发变更-传递机制的过程动态特征〔场景Ⅰ〕用户输入导致模型变化,并触发变更-传递机制39动态特征〔场景Ⅱ〕场景Ⅱ初始化过程创立模型实例,并初始化其数据。创立视图对象,并用对模型的引用作为初始化参数之一。视图通过调用附属过程支持变更-传递机制。视图创立控制器,此时将模型和视图的引用作为参数传递给控制器初始化过程。控制器通过调用附属过程来支持变更-传递机制。初始化完成,应用程序开场处理事件。(初始化过程可根据情况调整)动态特征〔场景Ⅱ〕场景Ⅱ初始化过程40动态特征〔场景Ⅱ〕MVC系统的初始化过程Mainprog.ModelViewControllerinitializeviewmodel,viewstartModelattachmakeControllerinitializeattachcontroller动态特征〔场景Ⅱ〕MVC系统的初始化过程Mainprog41构造〔1〕模型组件包含了应用程序的功能内核。封装了相应的数据并输出执行特定应用程序处理的过程。控制器代表用户调用这些过程。模型也提供访问它封装的数据的函数,这些函数可以由视图组件使用。构造〔1〕模型组件包含了应用程序的功能内核。42构造〔2〕变更-传播机制维护了一个模型中相依组件的注册表。所有视图还有一些控制器在这个表中登记了对变更通知的需求。模型状态的改变将触发变更-传播机制。每个在表中登记的视图和控制器都会收到变更通知。变更-传播机制是模型与视图控制器之间的唯一连接。构造〔2〕变更-传播机制43构造〔3〕视图组件向用户呈现信息不同的视图用不同的方法呈现信息。每个组件都有一个更新函数。这个函数被模型变更通知激活。这个函数被激活〔此时模型已经改变〕后,将使得视图重新和模型一致。在初始化阶段,视图向模型登记请求变更通知。每个视图将创立一个适宜的控制器。构造〔3〕视图组件向用户呈现信息44构造〔4〕控制器组件承受作为事件的用户输入。事件如何发送到控制器由用户界面平台决定。事件被翻译成为对模型或者视图的请求。如果控制器的行为依赖于模型的状态,那么控制器也需要向模型登记请求变更通知。例如:模型的改变使一个菜单输入能用或禁用时。构造〔4〕控制器组件承受作为事件的用户输入。45构造〔5〕Figure2ClassdiagramofPoliticalSelection构造〔5〕Figure2Classdiagramof46MVC模式Java实现过程1.控制器〔如Java中的main程序入口〕要新建模型;
2.控制器要新建一个或多个视图对象,并将它们与模型相关联;
3.控制器改变模型的状态;
4.当模型的状态改变时,模型将会自动刷新与之相关的视图MVC模式Java实现过程1.控制器〔如Java中的ma47MVC模式根本构造
ControllerModelViewMVC模式根本构造
ControllerModelVi48
系统功能本文要实现的Java应用程序是当用户在图形化用户界面输入一个球体的半径时,程序将显示该球体的体积与外表积。我们首先利用根本MVC模式实现以上程序,然后利用不同数量的模型、视图、控制器构造来扩展该程序。该程序主要由三个类构成:Sphere类扮演Model的角色TextView类为View角色SphereWindow类为Controller角色。
Java通过专门的类Observable及Observer接口来实现MVC编程模式。系统功能本文要实现的Java应用程序是当用户在图形化用户界49MVC模式的UML类图MVC模式的UML类图50具体实现Model类Sphere,必须扩展Observable类,在Observable类中,方法addObserver()将视图与模型相关联当模型状态改变时,通过方法notifyObservers()通知视图。其中实现MVC模式的关键代码为:具体实现Model类Sphere,必须扩展Observabl51代码importjava.util.Observable;classSphereextendsObservable{....publicvoidsetRadius(doubler){myRadius=r;setChanged();//IndicatesthatthemodelhaschangednotifyObservers();}....}代码importjava.util.Observable;52MVC模式的UML序列图MVC模式的UML序列图53importjava.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()));}......}importjava.util.Observer;54具体实现
SphereWindow类作为Controller,它主要新建Model与View,将view与Model相关联,并处理事件,其中的关键代码为:具体实现SphereWindow类作为Controller55publicSphereWindow(){super(“Spheres:volumeandsurfacearea〞);model=newSphere(0,0,100);TextViewview=newTextView();model.addObserver(view);view.update(model,null);view.addActionListener(this);Containerc=getContentPane();c.add(view);}publicvoidactionPerformed(ActionEvente){JTextFieldt=(JTextField)e.getSource();doubler=Double.parseDouble(t.getText());model.setRadius(r);}publicSphereWindow()56一个模型、两个视图和一个控制器
一个模型、两个视图和一个控制器57程序输出结果程序输出结果58publicSphereWindow(){super(“Spheres:volumeandsurfacearea〞);model=newSphere(0,0,100);TextViewtView=newTextView();model.addObserver(tView);tView.addActionLi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 提升教学效率的决策支持工具开发
- 教育领域中的数据安全与隐私保护探讨
- 提升教育园区网络教育资源安全的技术创新路径
- 青少年视力健康教育的实践与挑战
- 应聘奶粉活动推广方案
- 流行性乙脑患者的护理
- 生物中考一轮复习第3单元第5章绿色植物的一生
- 湖南涉外经济学院大学生医保培训课-课件
- 初中数学家长会课件
- 3D网布透气办公椅创新创业项目商业计划书
- 2025-2030中国近地轨道卫星行业市场发展趋势与前景展望战略研究报告
- 饺子店餐饮行业跨境出海战略研究报告
- 2025初级会计课件
- DBJ-T 15-94-2013静压预制混凝土桩基础技术规程(广东省标准)
- 作文好词好句讲解课件
- 套色剪纸的剪刻步骤李美慧课件
- 《电力系统中的电压电流互感器》课件
- 火箭发射场智能化-深度研究
- 混凝土台阶工程施工方案
- 成果汇报护理品管圈
- GB/T 9766.2-2024轮胎气门嘴试验方法第2部分:胶座气门嘴试验方法
评论
0/150
提交评论