a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 104|回复: 0

[专业语言] JAVA认证:JSF框架技术中使用的设计模式详解

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
设计模式可以辅佐用户在更高条理上抽象细节,更好地舆解系统结构。假如斗劲熟悉 GoF 设计模式和 JavaServer Faces 框架,本文可以辅佐您洞察 JSF 框架中使用的设计模式,深切理解其工作事理。7 F$ S6 D: i6 x% d8 o1 w+ [
  本文切磋了 JSF 框架中使用的设计模式。具体谈判的设计模式搜罗 Singleton、Model-View-Controller、Factory Method、State、Composite、Decorator、Strategy、Template Method 和 Observer 模式。
, I4 k* T0 B1 b6 T  设计模式和 JavaServer Faces 手艺/ t1 r) F6 o) Z. f) f/ \6 |1 @
  首先简要地介绍一下模式和 JSF 框架。$ U- G: y% W# j& u0 G
  模式,设计模式是对问题息争决方案进行抽象的普遍合用的体例。因为模式是所有开发人员和架构师公认的,所以模式可以节约时刻和资本。用外行话来说,模式就是关于某小我所共知的问题的经由验证的解决方案。模式可以重用,重用使得解决方案更健壮。+ ?$ ^& Y' f  E* c# E1 G6 T
  Java Server Faces, JSF 系统结构是一种 Web 应用轨范框架。它是 Java Community Process 敦促的,有望成为 Web 应用轨范开发的尺度框架。今朝用于开发 Web 应用轨范的框架有 50 多个,这声名孔殷需要实现框架的尺度化,这恰是 JSF 框架的方针!) {  z( p$ c/ m. r' ]4 }
  深切分解 JSF 模式4 T8 y4 w  g3 N+ U$ e& [
  此刻我们来谈判 JSF 系统结构中的各类设计模式。本文将具体谈判 Singleton、Model-View-Controller、Factory Method、State、Composite、Decorator、Strategy、Template Method 和 Observer 设计模式。我将剖析每种模式的用途及其在 JSF 框架中的浸染。7 {: p! f3 v8 N
  Singleton 模式
: F# e: H2 b7 o7 Q  Singleton 模式的目的是保证类只有一个实例被加载,该实例供给一个全局访谒点。当启动具有 JSF 撑持的 Web 应用轨范时,Web 容器初始化一个 FacesServlet 实例。在这个阶段,FacesServlet 对每个 Web 应用轨范实例化 Application 和 LifeCycle 实例一次。这些实例就采用众所周知的 Singleton 模式,凡是只需要该类型的一个实例。
1 s5 S; Q  u  b' u6 F  使用 JSF 的 Web 应用轨范只需要 Application 和 LifeCycle 类的一个实例。LifeCycle 治理多个 JSF 请求的整个生命期。因为其状况和行为在所有请求之间共享,这些对象采用 Singleton 模式合情合理。LifeCycle 维护的 PhaseListeners 也是 Singleton 模式的。PhaseListeners 由所有 JSF 请求共享。在 JSF 框架中可以普遍使用 Singleton 模式,以削减内存占用和供给对象的全局访谒。NavigationHandler(用于确定请求的逻辑结不美观)和 ViewHandler(用于建树视图)也是使用 Singleton 模式的例子。* ~& `) y6 p( P
  Model-View-Controller
/ Z" c) n* \6 Y5 _# J; V2 n  MVC 模式的目的是年夜数据暗示(View)中将数据(即 Model)分手出来。假如应用轨范有多种暗示,可以仅替代视图层而重用节制器和模子代码。近似的,假如需要改变模子,可以在很年夜水平上不改变视图层。控 制器措置用户动作,用户动作可能造成模子改变和视图更新。当用户请求一个 JSF 页面时,请求发送到 FacesServlet。FacesServlet 是 JSF 使用的前端节制器 servlet。和其他良多 Web 应用轨范框架一样,JSF 使用 MVS 模式消弭视图和模子之间的耦合。为了集中措置用户请求,节制器 servlet 改变模子并将用户导航到视图。
( C6 E. M! H9 W: l9 p" @, r. o  FacesServlet 是 JSF 框架中所有用户请求都要经由的节制器元素。FacesServlet 剖析用户请求,使用托管 bean 对模子挪用各类动作。后台(backing)或托管(managed)bean 就是该模子的例子。JSF 用户界面(UI)组件是视图层的例子。MVC 模式把使命分化给具有分歧手艺的开发人员,使这些使命能够同时进行,这样 GUI 设计人员就可以使用丰硕的 UI 组件建树 JSF 页面,同时后端开发人员可以建树托管 bean 来编写专门的营业逻辑代码。
1 J! Y" @' S' T0 g! R  Factory Method 模式
' U% ~. u8 i: d1 M# P  Factory Method 模式的目的是界说一个用于建树对象的接口,可是把对象实例化推迟到子类中。在 JSF 系统结构中,Factory Method 模式被用于建树对象。LifeCycleFactory 是一个建树和返回 LifeCycle 实例的工场对象。LifeCycleFactory 的 getLifeCycle 体例采用 Factory Method 模式,按照 LifeCycleId 建树(假如需要)并返回 LifeCycle 实例。自界说的 JSF 实现可以年夜头界说 getLifeCycle 抽象体例来建树自界说的 LifeCycle 实例。默认的 JSF 实现供给默认的 LifeCycle 实例。此外,对于每个 JSF 请求,FacesServlet 都年夜 FacesContextFactory 获得 FacesContext。FacesContextFactory 是一个抽象类,公开了 getFacesContext API,JSF 实现供给了 FacesContextFactory 和 getFacesContext API 的具体实现。这是此吐矣闽使用 Factory Method 模式的例子,具体的 FacesContextFactory 实现建树 FacesContext 对象。& F0 u$ ?* G$ z4 H- }6 G" o" r1 S; G
  State 模式8 @) Y/ L6 {# b  k
  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。
+ p* ^! f/ A6 D. b" A7 [# q1 s& j  在 State 模式中,LifeCycle 把 FacesContext 对象传递给 phase。每个阶段或状况改变传递给它的上下文,然后设置 FacesContext 自己中的标识表记标帜剖明下矣闽可能的轨范。JSF 实此刻每个轨范中改变其行为。每个阶段都可以作为下矣闽阶段的原由。FacesContext 有两种标识表记标帜 renderResponse 和 responseComplete 可以改变执行的挨次。每个轨范执行完成后,LifeCycle 搜检上一阶段是否设置了这些标识表记标帜。假如设置了 responseComplete,LifeCycle 则完全抛却请求的执行。假如经由某个阶段后设置了 renderResponse 标识表记标帜,JSF 就会跳过剩下的阶段而直接进入 Render Response 阶段。假如这两个标识表记标帜都没有设置,LifeCycle 就会按挨次继续执行下一步。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-3 07:53 , Processed in 0.395005 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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