· [Java论坛][安全论坛][数据库论坛][操作系统论坛]
· [专题] IBM Rational高峰论坛 Windows 7十大功能
· [专题] 史上就危险7月 微软 BizSpark 计划介绍
· [IT技术周刊][IT资源下载专区][病毒求助专区]
· [热点] 我也能做CTO_赛迪连载 赛迪七夕特别行动
· [热点] Chrome 4.0采用V8引擎 Java开发编程规范

J2EE基础:MVC模式和Struts模式的理解

发布时间:2007.07.19 05:39     来源:赛迪网技术社区    作者:dxaw

MVC方式通常在Smalltalk中用于建立用户接口。通过对MVC中蕴藏的设计模式可以帮你理解我们所说的“模式”的含义。

MVC包括三类对象,Model是应用对象、View为其屏幕表示、Controller定义了对用户输入的处理(反应)方式。在应用MVC方式以前,通常将这三个对象的功能合到了一起,应用MVC分离了它们,为设计提供了灵活性和可重用性。

MVC通过在view和model之间建立Subscribe/Notify协议,分离了view和model对象。View对象必须保证它的表示反应了model对象的状态,当model对象的数据改变时,model对象通知(Notify)view对象,作为对这一行为的反应,每个view对象得到了一个做出更新的机会。这种方式使得可以将多个view对象为一个model对象提供不同的表示。你也可以为model对象建立新的view对象,而不用重新编写model。下图演示了一个model和三个view:

从表面看,这一例子反应了一个将view和model分离的设计。然而,这种设计适合一类更通用的问题:减少对象之间的藕和性,这样,当一个对象改变时,将不会影响到另外的对象,甚至不需要知道另外的对象的实现细节。这种更通用的模式将在Observer模式中来描述。

MVC方式的另一个特点是,view对象是可嵌套定义的。例如,button的控制板可由一个包含嵌套button view对象的复杂view对象来实现;对象观察器的用户接口可由能重用于调试器的嵌套view对象组成。MVC方式采用CompositeView类(View的子类)来支持嵌套view,其行为与view对象的行为一致,可用于view对象能使用的任何场合。

于是,我们又可以把这种对待composite view就像处理其一个组件的方式看成一种设计(方式)。同样的,这种设计可抽象出另一类更通用的问题(的解决方式):我们在某种情形下将对象分成组,并且处理一个组就像对待对象个体。这种方式我们用Composite设计模式来描述。它允许你建立类的层次,在这一层次下,有些子类定义原始对象(如Button),而其它的类可以定义合成对象(CompositeView),合成对象可将原始对象装配成更复杂的对象。

同样,MVC也可改变视图类(view)对用户反应的方式,而不用改变其可视化表示。你可能想改变其对键盘响应的方式,如,使用弹出菜单代替命令键。MVC将这种反应机制封装为控制对象(Controller)。控制器有一个类层次,易于实现从一个已存在的控制器建立出一个变种—一种新的控制器。

视图(view)对象通过某一控制器对象的实例(instance)来实现特定的响应策略。为了实现不同的策略,可以简单的使用不同的控制器实例来替换当前的实例。甚至可以在运行时来改变视图的控制器,以改变视图对象对用户输入的响应(策略)。例如,一个view对象可置为disabled,即对用户的输入不做任何响应。要达到这一目的,仅仅只需让控制器忽略所有input事件。

这种视图—控制器关系即是Strategy设计模式的一个典型例子。所谓Strategy即这样一个对象,它表示了一种算法。这在你想要替换算法(无论是静态替换还是动态替换)时特别有用,而这样的算法可能有许多的变量、或者拥有复杂的数据结构。

MVC中也使用了别的设计模式,例如,使用Factory Method模式来描述视图的默认控制器类;采用Decorator模式来为视图增加滚动条等。但在MVC中的主要模式是前述的Observer、Composite、和Strategy设计模式。

(责任编辑:龚勋)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 关于Java编程的中文问题的几条分析原则 (07-17) · 新手入门:简单介绍Hibernate包的作用 (07-17)
· 实现在Hibernate中的分页查询原理解读 (07-17) · Java基础:Date和Calendar类的使用方法 (07-17)
· Java程序中布局管理器的使用方法 (07-13) · J2EE应用程序中SQL语句的自动构造方法 (07-13)
· J2EE中用EntityBean和JDO的优缺点分析 (07-13) · J2EE企业应用:Applet和Servlet的通信 (07-13)
· 使用AJAX+J2EE实现一个网上会议室系统 (07-13) · 对JSP数据库连接类使用方法的详细讲解 (07-13)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
资讯 通信 IT产品 IT技术 信息化
专题:扭亏为盈 联想09年Q2翻番
·专题:Tech·Ed 2009微..
·直播:2009互联网大会..
·迅雷搜狐"互搏" 谁动了..
专题:诺基亚危局已现 或重蹈摩托覆辙
·六股势力角逐4G标准 中..
·专题:联通iPhone并不贵..
·专题:排排坐开商店 三..
商务演示需求分析 多媒体会议室必备投影
·VMware在京隆重举行2009..
·专题:笔记本频道10月热..
·专题:学生机市场 惠普 ..
专题:Tech.Ed 2009微软技术大会
·专题:2009 SYBASE 亚太..
·专题:微软新一代桌面操..
·专题:2009年第3届CSDN..