仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 722|回复: 10
打印 上一主题 下一主题

[学习教程] JAVA网页编程之探究JSF框架中利用的计划形式

[复制链接]
小妖女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:12:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
C#跟java类似,但是在跨平台方面理论上可以跨平台,实际上应用不大,执行性能优于java,跟C++基本一致,但是启动速度还是慢.代码安全,但容易性能陷阱.js|计划  计划形式能够匡助用户在更高条理上笼统细节,更好地舆崩溃系布局。假如对照熟习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片断
  1. publicclassCustomViewHandlerextendsViewHandler{publicCustomViewHandler(ViewHandlerhandler){super();oldViewHandler=handler;}privateViewHandleroldViewHandler=null;publicvoidrenderView(facesContextcontext,UIViewRootview){//delegatemethodtooldViewHandleroldViewHandler.renderView(context,view);}//customimplementationofcalculateLocalepublicLocalecalculateLocale(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框架中失掉了很好的使用。
net程序员的大部门代码都靠控件拖拽完成的,虽然java也有,但是无论从美观和速度上都没发和.net比。java程序员都是代码完成的,所以java程序员常戏称.net程序员是操作员,呵呵。
蒙在股里 该用户已被删除
沙发
发表于 2015-1-20 17:13:28 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
飘灵儿 该用户已被删除
板凳
发表于 2015-1-29 13:20:02 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
小魔女 该用户已被删除
地板
发表于 2015-1-31 08:47:27 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
再见西城 该用户已被删除
5#
发表于 2015-1-31 18:12:44 | 只看该作者
是一种为 Internet发展的计算机语言
简单生活 该用户已被删除
6#
发表于 2015-2-4 20:51:46 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
7#
发表于 2015-2-10 09:07:17 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
谁可相欹 该用户已被删除
8#
发表于 2015-2-24 14:06:38 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
第二个灵魂 该用户已被删除
9#
发表于 2015-3-6 18:40:42 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
再现理想 该用户已被删除
10#
发表于 2015-3-12 07:45:31 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
若相依 该用户已被删除
11#
发表于 2015-3-19 18:47:57 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 00:10

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表