JSF框架中使用的设计模式介绍

JSF框架中使用的设计模式介绍,第1张

JSF框架中使用的设计模式介绍,第2张

设计模式可以帮助用户在更高的层次上抽象细节,更好地理解架构。如果你熟悉GoF设计模式和JavaServer Faces (JSF)框架,这篇文章可以帮助你深入了解JSF框架中使用的设计模式,并深刻理解它们的工作原理。

本文讨论了JSF框架中使用的设计模式。讨论的详细设计模式包括单例、模型-视图-控制器、工厂方法、状态、复合、装饰、策略、模板方法和观察者模式。

设计模式和JSF技术

首先,简单介绍一下模式和JSF框架。

模式,设计模式是一种普遍适用的抽象问题和解决方案的方法。因为模式被所有开发人员和架构师所认可,所以模式可以节省时间和资源。通俗地说,模式是一个众所周知的问题的成熟解决方案。模式可以重用,重用使得解决方案更加健壮。

Java Server Faces,JSF架构是一个Web应用框架。它由Java社区进程(JCP)推动,有望成为Web应用程序开发的标准框架。目前,开发Web应用程序的框架已经超过50种,这说明对框架进行标准化已经迫在眉睫,这也是JSF框架的目标!

JSF模式的深层分析

现在让我们讨论JSF建筑中的各种设计模式。本文将详细讨论单例、模型-视图-控制器、工厂方法、状态、复合、装饰、策略、模板方法和观察者等设计模式。我将分析每个模式的目的及其在JSF框架中的作用。

单一模式

Singleton模式的目的是确保只加载该类的一个实例,这提供了一个全局访问点。当支持JSF的Web应用程序启动时,Web容器初始化FacesServlet的一个实例。在这个阶段,FacesServlet为每个Web应用程序实例化一次应用程序和生命周期实例。这些实例采用众所周知的单例模式,通常只需要这种类型的一个实例。

使用JSF的Web应用程序只需要应用程序和生命周期类的一个实例。生命周期管理多个JSF请求的整个生命周期。因为它们的状态和行为在所有请求之间共享,所以这些对象采用单例模式是合理的。由LifeCycle维护的PhaseListeners也处于单例模式。所有JSF请求共享PhaseListeners。单例模式可以广泛应用于JSF框架中,以减少内存占用并提供对对象的全局访问。NavigationHandler(用于确定请求的逻辑结果)和ViewHandler(用于创建视图)也是使用Singleton模式的例子。

模型-视图-控制器(MVC)

MVC模式的目的是将数据(即模型)与数据表示(视图)分离开来。如果应用程序有多个表示,您只能替换视图层并重用控制器和模型代码。类似地,如果模型需要改变,视图层可以基本不变。控制器处理用户操作,这些操作可能会导致模型更改和视图更新。当用户请求JSF页面时,该请求被发送到FacesServlet。FacesServlet是JSF使用的前端控制器Servlet。像许多其他Web应用程序框架一样,JSF使用MVS模式来消除视图和模型之间的耦合。为了集中处理用户请求,控制器servlet更改模型并将用户导航到视图。

FacesServlet是一个控制器元素,JSF框架中的所有用户请求都要经过它。FacesServlet分析用户请求,并使用托管bean调用模型上的各种操作。后备或受管)bean就是这种模型的例子。JSF用户界面(UI)组件就是视图层的例子。MVC模式将任务分解给不同技能的开发人员,使这些任务可以同时进行,这样GUI设计人员可以使用丰富的UI组件来创建JSF页面,而后端开发人员可以创建托管bean来编写专门的业务逻辑代码。

工厂方法模式

方法模式的目的是定义一个创建对象的接口,但是将对象的实例化延迟到子类。在JSF架构中,工厂方法模式用于创建对象。LifeCycleFactory是一个创建并返回生命周期实例的工厂对象。LifeCycleFactory的getLifeCycle (String LifeCycleId)方法采用工厂方法模式,根据LifeCycleId创建(如有必要)一个生命周期实例并返回。的自定义JSF实现可以重新定义getLifeCycle抽象方法来创建自定义生命周期实例。的默认JSF实现提供了默认的生命周期实例。此外,对于每个JSF请求,FacesServlet从FacesContextFactory获取FacesContext。FacesContextFactory是一个抽象类,它公开getFacesContext API。JSF实现提供了FacesContextFactory和getFacesContext API的具体实现。这是使用工厂方法模式的另一个例子。特定的FacesContextFactory实现创建FacesContext对象。

状态模式

状态模式的目的是在表示状态的不同类之间分配与状态相关的逻辑。FacesServlet调用LifCycle实例上的execute和render方法。生命周期协调不同的阶段来执行JSF请求。这里,JSF实现遵循状态模式。如果不使用这种模式,生命周期实现将会被大量的条件(即“如果”语句)所混淆。JSF实现为每个状态(或阶段)创建一个单独的类,并调用step。Phase是一个抽象类,定义了每个步骤的公共接口。在JSF框架中定义了六个阶段(步骤):restoreviewphase、ApplyRequestValues、ProcessValidationsPhase、UpdateModelValuesPhase、InvokeApplicationPhase和RenderResponsePhase。

在状态模式下,生命周期将FacesContext对象传递给阶段。每个阶段或状态都会更改传递给它的上下文信息,然后在FacesContext本身中设置标志来指示下一个可能的步骤。JSF实现在每一步都会改变它的行为。每个阶段都可能是下一个阶段的原因。FacesContext有两个标志,renderResponse和responseComplete,它们可以改变执行顺序。每个步骤完成后,LifeCycle会检查这些标志是否在之前的阶段中设置。如果设置了responseComplete,LifeCycle将完全放弃请求的执行。如果在某个阶段之后设置了renderResponse标志,JSF将跳过剩余的阶段,直接进入渲染响应阶段。如果没有设置这两个标志,生命周期将按顺序继续下一步。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » JSF框架中使用的设计模式介绍

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情