欢迎来到HELLO素材网! 南京网站制作选择顺炫科技
丰富的DIV CSS模版、JS,jQuery特效免费提供下载
当前位置:主页 > 建站教程 > 网站制作教程 >

探求JSF框架中利用的设计形式

发表于2019-04-24 02:07| 次阅读| 来源网络整理| 作者session

摘要:探求JSF框架中利用的设计形式

探求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框架中失去了很好的应用。