您当前的位置: AG亚游集团 > 网站编程 > JSP教程 > 探索JSF框架中使用的设计模式

探索JSF框架中使用的设计模式

作者:guanchaofeng 来源:本站整理 发布时间: 2009-11-12 21:53 点击: 次
设计模式可以帮助用户在更高层次上抽象细节,更好地理解体系结构。如果比较熟悉GoF设计模式和JavaServerFaces(JSF)框架,本文可以帮助您洞察JSF框架中使用的设计模式,深入理解其工作原理。 本文探讨了JSF框架中使用的设计模式。详细讨论的设计模式包括Singl

AG亚游集团,(一)省级人民政府贯彻落实国家有关学校安全工作的法律法规、规章制度和标准规范,建立健全学校安全工作治理机制,制定完善本地方学校安全标准体系,开展学校安全事项认证情况。

在三位同学和家长在场的情况下,学校听取当事学生的描述。明明称,当时他站在厕所的一个隔间里面,亮亮进厕所后看见他,就从隔壁的隔间拿起垃圾筐扔了一下,正好扣在自己的头上。之后,他在厕所洗了洗就出来了。笨蛋也能年赚100万txt这话说的一点也不过分。特朗普在NBA球员眼里从来不是自己人,他不仅和NBA没什么太紧密的联系,倒是因为此前一次歧视女性的言论和很多NBA球星结下了梁子。今年10月,特朗普在2005年的一段谈话录音被曝光,其中有大量侮辱女性的言论,特朗普没有第一时间站出来道歉,而是将之归结为“更衣室里的玩笑”,这样的言论招致全美各大媒体口诛笔伐,最为愤怒的就是以勒布朗为代表,这批每天都会呆在更衣室里的NBA球员。勒布朗直言:“我们的更衣室绝对不会出现歧视女性的言论。”他的说法得到了几乎所有受访NBA球员、教练的支持——毕竟几年前斯特林就是因为类似的所谓非公开“更衣室”言论被驱逐出了NBA。

探索JSF框架中使用的设计模式

  设计模式可以帮助用户在更高层次上抽象细节,更好地理解体系结构。如果比较熟悉GoF设计模式和JavaServerFaces(JSF)框架,本文可以帮助您洞察JSF框架中使用的设计模式,深入理解其工作原理。
  
  本文探讨了JSF框架中使用的设计模式。详细讨论的设计模式包括Singleton、Model-View-Controller、FactoryMethod、State、Composite、Decorator、Strategy、TemplateMethod和Observer模式。
  
  设计模式和JavaServerFaces(JSF)技术
  
  首先简要地介绍一下模式和JSF框架。
  
  模式。设计模式是对问题和解决方案进行抽象的普遍适用的方法。因为模式是所有开发人员和架构师公认的,所以模式可以节约时间和资源。用外行话来说,模式就是关于某个人所共知的问题的经过验证的解决方案。模式可以重用,重用使得解决方案更健壮。
  
  JavaServerFaces。JSF体系结构是一种Web应用程序框架。它是JavaCommunityProcess(JCP)推动的,有望成为Web应用程序开发的标准框架。目前用于开发Web应用程序的框架有50多个,这说明迫切需要实现框架的标准化,这正是JSF框架的目标!
  
  深入剖析JSF模式
  
  现在我们来讨论JSF体系结构中的各种设计模式。本文将详细讨论Singleton、Model-View-Controller、FactoryMethod、State、Composite、Decorator、Strategy、TemplateMethod和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来编写专门的业务逻辑代码。
  
  FactoryMethod模式
  
  FactoryMethod模式的目的是定义一个用于创建对象的接口,但是把对象实例化推迟到子类中。在JSF体系结构中,FactoryMethod模式被用于创建对象。LifeCycleFactory是一个创建和返回LifeCycle实例的工厂对象。LifeCycleFactory的getLifeCycle(StringLifeCycleId)方法采用FactoryMethod模式,根据LifeCycleId创建(如果需要)并返回LifeCycle实例。自定义的JSF实现可以重新定义getLifeCycle抽象方法来创建自定义的LifeCycle实例。默认的JSF实现提供默认的LifeCycle实例。此外,对于每个JSF请求,FacesServlet都从FacesContextFactory得到FacesContext。FacesContextFactory是一个抽象类,公开了getFacesContextAPI,JSF实现提供了FacesContextFactory和getFacesContextAPI的具体实现。这是另外一个使用FactoryMethod模式的例子,具体的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就会跳过剩下的阶段而直接进入RenderResponse阶段。如果这两个标志都没有设置,LifeCycle就会按顺序继续执行下一步。
  
  Composite模式
  
  Composite模式让客户代码能够统一处理复合对象和基本对象。复合对象是基本对象的容器。在第一阶段(RestoreView阶段)和最后一个阶段(RenderResponse阶段),使用JSFUI组件构造UIView。UIComponentBase就是Composite模式中Component抽象类的一个例子。UIViewRoot是Composite类,而UIOutput(比方说)就是叶子(或者基本类)。UIComponentBase类定义了叶子和复合对象的公共方法,如编码/解码值和子节点管理函数。子节点管理函数,如getChildren,对于叶子节点返回空列表,对于复合节点则返回其子节点。
  
  Decorator模式
  
  Decorator模式的目的是不通过子类化动态扩展对象的行为。JSF框架有很多扩展点(即可插入机制)。JSF实现可使用Decorator模式替换默认的PropertyResolver、VariableResolver、ActionListener、NavigationHandler、ViewHandler或StateManager。通常自定义实现接受通过构造函数传递给它的默认实现的引用。自定义实现仅仅改写功能的一个子集,而将其他功能委托给默认实现。如果希望实现自定义的ViewHandler,改写默认ViewHandler实现的calculateLocale方法,可以像清单1那样编写CustomViewHandler类:
  
  清单1.CustomViewHandler片段
  
  publicclassCustomViewHandlerextendsViewHandler{
  
  publicCustomViewHandler(ViewHandlerhandler){
  
  super();
  
  oldViewHandler=handler;
  
  }
  
  privateViewHandleroldViewHandler=null;
  
  publicvoidrenderView(facesContextcontext,UIViewRootview){
  
  /delegatemethodtooldViewHandler
  
  oldViewHandler.renderView(context,view);
  
  }
  
  /customimplementationofcalculateLocale
  
  publicLocalecalculateLocale(FacesContextcontext){
  
  }
  
  }
  
  Strategy模式
  
  Strategy模式的目的是封装不同的概念。JSF框架采用Strategy模式使用委托实现模型呈现UI组件。JSF技术支持两种呈现模型。在直接实现模型中,UI组件对收到的请求中的数据进行解码,然后编码这些数据进行显示。在委托实现模型中,解码和编码操作委托给和组建关联的专门呈现器。后一种模型利用了Strategy设计模式,比直接实现更灵活。在Strategy模式中,将不同的算法封装在单独的对象中,从而可以动态地改变算法。JSF实现可以用已有的renderkit实例注册另外的呈现器,当应用程序启动的时候,JSF实现读取配置文件将这些呈现器和UI组件联系在一起。
  
  TemplateMethod模式
  
  TemplateMethod模式的目的是将变化的步骤推迟到子类中,而在父类中定义那些固定的算法步骤。JSF框架通过PhraseListeners展现了TemplateMethod模式提供的功能。采用TemplateMethod(或者“hook”)使得Web作者可以为不同阶段之间的可选步骤提供实现,而主要阶段仍然和JSF框架的定义一致。JSF框架提供了PhaseListeners,概念上类似于TemplateMethod模式中的可变步骤。JSF框架有六个预定义的阶段,在每个阶段之间,Web作者可以实现PhaseListeners来提供类似于TemplateMethodhook的hook。事实上,这种结构比TemplateMethod模式更具有扩展性。可以通过注册PhraseId为ANY_PHRASE的PhaseListener在每个阶段后提供hook。如果PhaseId是ANY_PHASE,JSF实现就会在每个阶段之前和之后调用该PhaseListener。JSF框架中的实现略有不同,因为可以根本没有PhaseListener,但是在TemplateMethod模式中,子类通常重新定义父类中抽象的可变步骤。
  
  Observer模式
  
  Observer模式的目的是当目标对象的状态改变时自动通知所有依赖的对象(即观察器)。JSF在UI组件中实现了Observer模式。JSF有两类内建事件:ActionEvent和ValueChangedEvent。ActionEvent用于确定用户界面组件(如按钮)的激活。当用户单击按钮时,JSF实现通知添加到该按钮上的一个或多个动作监听程序。于是该按钮被激活,或者说按钮(主体)的状态改变了。添加到按钮上的所有监听程序(即观察器)都收到通知该主体状态已经改变。类似的,当输入UI组件中的值改变时,JSF实现通知ValueChangeListener。
  
  结束语
  
  JSF框架利用了Singleton、Model-View-Controller、FactoryMethod、State、Composite、Decorator、Strategy、TemplateMethod和Observer设计模式。因为它的体系结构建立在已经验证的设计模式的基础上,这是一个健壮的框架,模式在JSF框架中得到了很好的利用。

本文"探索JSF框架中使用的设计模式"由远航站长收集整理而来,仅供大家学习与参考使用。更多AG亚游集团尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 广告合作 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(AG亚游集团). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类AG亚游集团.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4
证监会第三任主席周正庆病逝 立家规饭桌禁谈股市 这名辅导员半年第4次上热搜:发出学生名画模仿秀 军报:禁酒令实施半年成效明显 军人不能醉太平 阿尔及利亚吁非洲国家携手切断恐怖组织资金来源 直击|迅雷推区块链生态:3亿链克全投迅雷链扶持计划 台军禁用小米华为等大陆品牌智能手机 国台办回应 德国上调2018年经济增长预测 就业人数料创纪录 环球时报社评:特朗普歪曲中美关税全貌忽悠世界 人民网:“网红饮品”靠什么才能“长红”? 伦敦出租车司机拟对优步集体诉讼,索赔12.5亿英镑 一夜赞赏30万 这篇“刷屏”文章背后却并不简单 中国在这些领域创下多个“世界第一” 无人不服
天津球迷赠权健“称霸”旗帜 束昱辉重申引援问题 CBA外援流行打短工 萨林杰式救火队员并不好找 民粹主义或将在意大利政坛兴起 中方回应 刘鹤访美的外贸新信号:或推动中美双边投资协定谈判 恒丰主帅:首回合本应赢鲁能 中超争取完成保级 黄金乐观情绪不断积聚 断三区+1组连号 双色球头奖11注657万落5地 德媒谈俄德领导人会晤:普京送默克尔花是“侮辱” 环法赛托马斯瞄准总冠军 周六最后发力扩大优势 父亲称13岁女儿被强奸 警方:是“约炮”不予立案 山东省检察院依法介入“长生疫苗”事件 北京长安街新彩虹门主体结构完工 一月底前回归
丁磊:网易将寻求在中国上市 没有计划剥离其他业务 大连原常务副市长袁克力涉严重违纪接受调查(图) 美得州高中枪击案致8死 特朗普夫妇发文表达慰问 侥幸!火箭指挥官逃过一劫 怒骂裁判婊子没被罚 机器翻译正消除语言障碍 人类专业翻译会下岗吗? 小威:NO.1是我回归的唯一原因 希望女儿能见证 明日开赛!2018玉龙国际赛马公开赛第1赛事日前瞻 二季度财报公布 搜狗的下一个增长点在哪里? 多部门:19项涉企证照事项将整合 实行24证合一 前景最好的十大专业 白手起家创业点子 女生最值得学的手艺 2017做什么生意有前景 AG亚游集团