文档详情

Java SE应用程序设计与MVC.doc

发布:2017-09-12约1.61万字共24页下载文档
文本预览下载声明
Java SE应用程序设计与MVC 内容 - 什么是模型-视图-控制器(MVC)? - MVC组件之间的交互 - 修改了MVC设计 - 使用修改的MVC - 问题与应用设计 - 常用Swing组件监听器 - 结论 什么是模型-视图-控制器(MVC)? 如果你已经编程的图形用户界面(GUI)在过去10年左右的图书馆,你有可能遇到的模型 - 视图 - 控制器(MVC)设计。 MVC最早是由引进特里夫Reenskaug ,一个Smalltalk的开发者在施乐帕洛阿尔托研究中心在1979年,并有助于去耦数据访问和业务逻辑从它显示给用户的方式。 更精确地说,MVC可细分为三个要素: 模型 -模型表示数据和支配访问这个数据的更新规则。 在企业软件,模型经常作为一个现实世界的过程的软件近似。 视图 -视图呈现模型的内容。 它指定了数据模型究竟应该如何呈现。 如果模型数据的变化,根据需要的视图必须更新它的介绍。 这可以通过使用推模式 , 即认为其自身注册到模型更改通知,或拉模式 ,其中的观点负责调用模型时,它需要检索最新的数据来实现。 控制器 -控制器转换的观点付诸行动,该模型将执行用户的交互。 在一个独立的GUI客户端,用户交互可能是按钮单击或菜单选择,而在企业的Web应用程序,它们将显示为GET和POST HTTP请求。 根据上下文,控制器还可以选择一个新的观点 - 例如,结果的网页 - 呈现给用户。 MVC组件之间的交互 本节将仔细看看一种方式来实现图1中的在应用程序的上下文中的Java平台标准版6 (Java SE 6中)。 一旦模型,视图和控制器对象被实例化,发生以下情况: 该视图注册为模型上的监听器。 任何更改模型的基础数据直接导致广播变更通知,该观点得到。 这是前面所述的推模型的一个例子。 请注意,该模型是不知道的视图或控制器 - 它只是改变广播通知给所有感兴趣的听众。 该控制器绑定到视图。 这通常意味着,那些在视图上执行的任何用户操作会在控制器类中调用一个注册的侦听器方法。 所述控制器被赋予一个引用到底层模型。 一旦用户与视图进行交互时,将发生以下操作: 该观点认识到,一个GUI操作 - 例如,按下一个按钮或拖动滚动条 - 已发生,使用注册时,这样的动作发生时要调用的侦听器方法。 该视图调用控制器上适当的方法。 控制器访问模型,有可能更新它在适当的用户动作的方法。 如果模型已经改变,它更改通知感兴趣的听众,如视图。 在某些架构中,控制器也可能是负责更新的视图。 这是常见的基于Java技术的企业应用程序。 图2更详细地显示这种相互作用。 图2:Java SE应用程序使用MVC 正如本文前面所提到的,该模型不带引用的观点,而是使用一个事件通知模型来通知改变的有关方面。 其中一个这样强大的设计所带来的后果是,很多观点可以有相同的底层模型。 当数据模型发生变化时,每个视图是由一个属性更改事件通知,并可以相应地进行自我更新。 例如,图3显示了使用相同的数据模型两种看法。 图3。 多个视图使用相同的型号 修改了MVC设计 最近的一个实现MVC设计场所的模型和视图之间的控制器。 本设计中,这是常见的苹果可可框架中,示于图4。 图4。 一个MVC设计放置控制器模型和视图之间 这样的设计和更传统的版本的MVC之间的主要区别是,在模型对象的状态变化的通知是通过控制器传送到视图。 因此,控制器介导数据的模型和视图对象之间在两个方向上的流动。 查看对象,一如既往地使用控制器用户操作转化为对模型属性的更新。 此外,改变模型状态传达通过应用程序的控制器对象来查看对象。 因此,当所有三个组件被实例化,视图和模型都将注册到控制器。 一旦用户与视图进行交互,该事件几乎是一样的: 该观点认识到,一个GUI操作 - 例如,按下一个按钮或拖动滚动条 - 已发生,使用注册时,这样的动作发生时要调用的侦听器方法。 该视图调用控制器上适当的方法。 控制器访问模型,有可能更新它在适当的用户动作的方法。 如果模型已经改变,它更改通知感兴趣的听众。 然而,在这种情况下,该变化被发送到控制器。 为什么采用这样的设计? 使用这种改良的MVC有助于从视图中更完全解耦模型。 在这种情况下,控制器可以决定,它希望找到与控制器注册一个或多个模型的模型属性。 此外,它也能提供这种效果对于注册在其一个或多个视图模型的属性更改的方法。 用改进的MVC 本节中的文章将告诉您如何将这个设计付诸实践,开始与模型。 假设你想使用带有五个属性一个简单的显示模式来绘制一些文字。 代码示例1所示,你可以用它来创建这样一个模型一个简单的组件。 代码示例1 公共类TextElementModel扩展AbstractModel { 私人字符串
显示全部
相似文档