首页
|
Vista
|
WinXP
|
Java
|
程序开发
|
SEO优化
|
网络应用
|
硬件资讯
|
计算机等级认证
|
网站建设
|
问题帮助
|
图形图象
|
程序论坛
微软认证
|
思科认证
|
Java认证
|
Linux认证
|
Oracle认证
|
程序员
|
电子商务
|
网络工程
|
信息系统
|
软件设计
|
信息技术
|
网络管理
Java首页
|
Applets
|
Socket编程
|
JSP
|
Java与XML
|
JavaMail
|
JavaDelphi
|
JavaBeans
|
J2SE
|
J2ME
|
EJB
|
热门:
计算机
Java
vista
服务器
系统
计算机考试
数据库
SQL
北大青鸟
使用技巧
您现在的位置:
立珊计算机专业网
>
程序开发
>
编程语言
>
Java
>
J2EE
>> 文章内容
站内搜索
JSF框架中使用的设计模式介绍
2008-01-15 05:53:30 来源:立珊网络计算机专业网
推荐给好友
收藏本页
保存本文
设计模式可以帮助用户在更高层次上抽象细节,更好地理解体系结构。如果比较熟悉 GoF 设计模式和 JavaServer Faces (JSF) 框架,本文可以帮助您洞察 JSF 框架中使用的设计模式,深入理解其工作原理。
本文探讨了 JSF 框架中使用的设计模式。详细讨论的设计模式包括 Singleton、Model-View-Controller、Factory Method、State、Composite、Decorator、Strategy、Template Method 和 Observer 模式。
设计模式和 JavaServer Faces (JSF) 技术
首先简要地介绍一下模式和 JSF 框架。
模式,设计模式是对问题和解决方案进行抽象的普遍适用的方法。因为模式是所有开发人员和架构师公认的,所以模式可以节约时间和资源。用外行话来说,模式就是关于某个人所共知的问题的经过验证的解决方案。模式可以重用,重用使得解决方案更健壮。
Java Server Faces, JSF 体系结构是一种 Web 应用程序框架。它是 Java Community Process (JCP) 推动的,有望成为 Web 应用程序开发的标准框架。目前用于开发 Web 应用程序的框架有 50 多个,这说明迫切需要实现框架的标准化,这正是 JSF 框架的目标!
深入剖析 JSF 模式
现在我们来讨论 JSF 体系结构中的各种设计模式。本文将详细讨论 Singleton、Model-View-Controller、Factory Method、State、Composite、Decorator、Strategy、Template Method 和 Observer 设计模式。我将分析每种模式的用途及其在 JSF 框架中的作用。
Singleton 模式
Singleton 模式的目的是保证类只有一个实例被加载,该实例提供一个全局访问点。当启动具有 JSF 支持的 Web 应用程序时,Web 容器初始化一个 FacesServlet 实例。在这个阶段,FacesServlet 对每个 Web 应用程序实例化 Application 和 LifeCycle 实例一次。这些实例就采用众所周知的 Singleton 模式,通常只需要该类型的一个实例。
使用 JSF 的 Web 应用程序只需要 Application 和 LifeCycle 类的一个实例。LifeCycle 管理多个 JSF 请求的整个生命期。因为其状态和行为在所有请求之间共享,这些对象采用 Singleton 模式合情合理。LifeCycle 维护的 PhaseListeners 也是 Singleton 模式的。PhaseListeners 由所有 JSF 请求共享。在 JSF 框架中可以广泛使用 Singleton 模式,以减少内存占用和提供对象的全局访问。NavigationHandler(用于确定请求的逻辑结果)和 ViewHandler(用于创建视图)也是使用 Singleton 模式的例子。
Model-View-Controller (MVC)
MVC 模式的目的是从数据表示(View)中将数据(即 Model)分离出来。如果应用程序有多种表示,可以仅替换视图层而重用控制器和模型代码。类似的,如果需要改变模型,可以在很大程度上不改变视图层。控 制器处理用户动作,用户动作可能造成模型改变和视图更新。当用户请求一个 JSF 页面时,请求发送到 FacesServlet。FacesServlet 是 JSF 使用的前端控制器 servlet。和其他很多 Web 应用程序框架一样,JSF 使用 MVS 模式消除视图和模型之间的耦合。为了集中处理用户请求,控制器 servlet 改变模型并将用户导航到视图。
FacesServlet 是 JSF 框架中所有用户请求都要经过的控制器元素。FacesServlet 分析用户请求,使用托管 bean 对模型调用各种动作。后台(backing)或托管(managed)bean 就是该模型的例子。JSF 用户界面(UI)组件是视图层的例子。MVC 模式把任务分解给具有不同技能的开发人员,使这些任务能够同时进行,这样 GUI 设计人员就可以使用丰富的 UI 组件创建 JSF 页面,同时后端开发人员可以创建托管 bean 来编写专门的业务逻辑代码。
Factory Method 模式
Factory Method 模式的目的是定义一个用于创建对象的接口,但是把对象实例化推迟到子类中。在 JSF 体系结构中,Factory Method 模式被用于创建对象。LifeCycleFactory 是一个创建和返回 LifeCycle 实例的工厂对象。LifeCycleFactory 的 getLifeCycle (String LifeCycleId) 方法采用 Factory Method 模式,根据 LifeCycleId 创建(如果需要)并返回 LifeCycle 实例。自定义的 JSF 实现可以重新定义 getLifeCycle 抽象方法来创建自定义的 LifeCycle 实例。默认的 JSF 实现提供默认的 LifeCycle 实例。此外,对于每个 JSF 请求,FacesServlet 都从 FacesContextFactory 得到 FacesContext。FacesContextFactory 是一个抽象类,公开了 getFacesContext API,JSF 实现提供了 FacesContextFactory 和 getFacesContext API 的具体实现。这是另外一个使用 Factory Method 模式的例子,具体的 FacesContextFactory 实现创建 FacesContext 对象。
State 模式
State 模式的目的是在表示状态的不同类之间分配与状态有关的逻辑。FacesServlet 对 LifCycle 实例调用 execute 和 render 方法。LifeCycle 协调不同的 Phrase 以便执行 JSF 请求。在这里 JSF 实现就遵循了 State 模式。如果没有使用这种模式,LifeCycle 实现就会被大量的条件(即 “if” 语句)搅得一塌糊涂。JSF 实现为每个状态(或阶段)创建单独的类并调用 step。phase 是一个抽象类,定了每个 step 的公共接口。在 JSF 框架中定义了六个 phrase(即 step):RestoreViewPhase、ApplyRequestValues、ProcessValidationsPhase、 UpdateModelValuesPhase、InvokeApplicationPhase 和 RenderResponsePhase。
在 State 模式中,LifeCycle 把 FacesContext 对象传递给 phase。每个阶段或状态改变传递给它的上下文信息,然后设置 FacesContext 本身中的标志表明下一个可能的步骤。JSF 实现在每个步骤中改变其行为。每个阶段都可以作为下一个阶段的起因。FacesContext 有两种标志 renderResponse 和 responseComplete 可以改变执行的顺序。每个步骤执行完成后,LifeCycle 检查上一阶段是否设置了这些标志。如果设置了 responseComplete,LifeCycle 则完全放弃请求的执行。如果经过某个阶段后设置了 renderResponse 标志,JSF 就会跳过剩下的阶段而直接进入 Render Response 阶段。如果这两个标志都没有设置,LifeCycle 就会按顺序继续执行下一步。
转贴于:立珊网络计算机专业网站
共2页: 上一页 1
[2]
下一页
相关关键字:
介绍
使用
框架
JSF
模式
实现
阶段
Method
可以
一个
上一篇:
JRuby:集Java与RoR之所长
下一篇:
Java编程中异常处理的优劣之道
【
设为主页
】【
加入收藏
】【
打印本文
】【
回到顶部
】【
关闭此页
】
点击查看
已有
0
位对此新闻感兴趣的网友发表了看法
我的通行证:
密码:
验证码:
匿名
注册通行证
相关文章
·
Java编程中异常处理的优劣之道
·
Hibernate3.x过滤器的高级应用
·
Spring让LOB数据操作变得简单易行
·
Java技术在多数据库系统中的应用研究
·
新手入门:写Java程序的三十个基本规则
·
Java SE 6新特性:Instrumentation
·
AJAX推送与拉取方式的比较
·
Java有能力抵挡LAMP的进攻吗?
·
Hibernate+Struts的J2EE应用开发
·
Java Web层的下一个王者是谁?
推荐文章
·
为Java程序中添加播放MIDI音乐功能
·
Spring破冰之旅 始于足下
·
彻底明白 Java 语言中的IO系统
·
动态调用动态语言之Java脚本API
·
Java 6.0 操作脚本语言基础
·
用纯JAVA语言编程读取MAC地址的实现
·
Java关于Cookie的操作
·
Java开发中的事件驱动模型实例详解
·
用RMI和CORBA进行分布式Java编程
·
在eclipse下配置jboss401配置问题
JavaBeans
·构造Jsp/javabean开发和发布环境的简单办
·Jsp中的Application使用
·jsp中javaBean的运用
·JBOSS3.0.4配置及使用初步
·J2EE'SEJBTechnology
·连接数据库的类
·Petstore源码追踪记(3)-商业逻辑处理(五
·Petstore源码追踪记(3)-商业逻辑处理(四
·Petstore源码追踪记(3)-商业逻辑处理(三
·Petstore源码追踪记(3)-商业逻辑处理(二
J2SE
·这是我们公司总结的一些关于中文乱码问题
·JAR文件包及jar命令详解
·让Java程序自带JRE
·使用J2SE API读取Properties文件的
·JAR 文件揭密
·native2ascii详解
·JavaMail API简介
·利用iText写PDF心得
·简化范式匹配
·MSN历史记录合并工具MSNHistoryCombiner
Java与XML
判断数字、整数的方法 isNumeric
java中判断字符串是否数字的两种
在DOM4J中使用XPath
Web Service初步体验:自定
Getting Start: Apach
构建适用不同客户端的J2EE网络应
Web Service初步体验:Hell
利用JBuilder2005开发Web应用程
Java编程获取硬盘空间
关于站点
-
广告服务
-
联系我们
-
版权隐私
-
免责声明
-
网站地图
-
意见反馈
立珊计算机IT网 版权所有. . 对本站有任何建议、意见或投诉,可以联系我们.
Copyright©2007-2010 Www.Lis123.Com All Rights Reserved.