a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 101|回复: 0

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

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
设计模式可以辅佐用户在更高条理上抽象细节,更好地舆解系统结构。假如斗劲熟悉 GoF 设计模式和 JavaServer Faces 框架,本文可以辅佐您洞察 JSF 框架中使用的设计模式,深切理解其工作事理。
. Y6 R# ?9 S( l, N  本文切磋了 JSF 框架中使用的设计模式。具体谈判的设计模式搜罗 Singleton、Model-View-Controller、Factory Method、State、Composite、Decorator、Strategy、Template Method 和 Observer 模式。
0 |; w- F; f# j# _  设计模式和 JavaServer Faces 手艺4 \6 C( F+ O) u! ~+ |
  首先简要地介绍一下模式和 JSF 框架。  M5 k& g9 I' t' w3 [7 j
  模式,设计模式是对问题息争决方案进行抽象的普遍合用的体例。因为模式是所有开发人员和架构师公认的,所以模式可以节约时刻和资本。用外行话来说,模式就是关于某小我所共知的问题的经由验证的解决方案。模式可以重用,重用使得解决方案更健壮。
$ a+ Q5 m' u: V  Java Server Faces, JSF 系统结构是一种 Web 应用轨范框架。它是 Java Community Process 敦促的,有望成为 Web 应用轨范开发的尺度框架。今朝用于开发 Web 应用轨范的框架有 50 多个,这声名孔殷需要实现框架的尺度化,这恰是 JSF 框架的方针!
0 H7 D0 E1 }( u1 v7 T% o  深切分解 JSF 模式+ x( J7 [. o9 @  ~, x" Q: A  S
  此刻我们来谈判 JSF 系统结构中的各类设计模式。本文将具体谈判 Singleton、Model-View-Controller、Factory Method、State、Composite、Decorator、Strategy、Template Method 和 Observer 设计模式。我将剖析每种模式的用途及其在 JSF 框架中的浸染。
0 p, z' k: c& F& d+ _# o! |, m  Singleton 模式
' U, S/ Y, t3 U" W" n& B. f; ?2 x  Singleton 模式的目的是保证类只有一个实例被加载,该实例供给一个全局访谒点。当启动具有 JSF 撑持的 Web 应用轨范时,Web 容器初始化一个 FacesServlet 实例。在这个阶段,FacesServlet 对每个 Web 应用轨范实例化 Application 和 LifeCycle 实例一次。这些实例就采用众所周知的 Singleton 模式,凡是只需要该类型的一个实例。" |3 y( K' ^0 ~" U2 ?9 ]
  使用 JSF 的 Web 应用轨范只需要 Application 和 LifeCycle 类的一个实例。LifeCycle 治理多个 JSF 请求的整个生命期。因为其状况和行为在所有请求之间共享,这些对象采用 Singleton 模式合情合理。LifeCycle 维护的 PhaseListeners 也是 Singleton 模式的。PhaseListeners 由所有 JSF 请求共享。在 JSF 框架中可以普遍使用 Singleton 模式,以削减内存占用和供给对象的全局访谒。NavigationHandler(用于确定请求的逻辑结不美观)和 ViewHandler(用于建树视图)也是使用 Singleton 模式的例子。  ~+ v, {8 j- d6 W2 l9 R
  Model-View-Controller
/ M! y- A! c( l  MVC 模式的目的是年夜数据暗示(View)中将数据(即 Model)分手出来。假如应用轨范有多种暗示,可以仅替代视图层而重用节制器和模子代码。近似的,假如需要改变模子,可以在很年夜水平上不改变视图层。控 制器措置用户动作,用户动作可能造成模子改变和视图更新。当用户请求一个 JSF 页面时,请求发送到 FacesServlet。FacesServlet 是 JSF 使用的前端节制器 servlet。和其他良多 Web 应用轨范框架一样,JSF 使用 MVS 模式消弭视图和模子之间的耦合。为了集中措置用户请求,节制器 servlet 改变模子并将用户导航到视图。
, R/ O# q/ ]3 j- [  FacesServlet 是 JSF 框架中所有用户请求都要经由的节制器元素。FacesServlet 剖析用户请求,使用托管 bean 对模子挪用各类动作。后台(backing)或托管(managed)bean 就是该模子的例子。JSF 用户界面(UI)组件是视图层的例子。MVC 模式把使命分化给具有分歧手艺的开发人员,使这些使命能够同时进行,这样 GUI 设计人员就可以使用丰硕的 UI 组件建树 JSF 页面,同时后端开发人员可以建树托管 bean 来编写专门的营业逻辑代码。, j7 w& Y: i! @5 x
  Factory Method 模式
- h) i7 ^8 ^/ n; {  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 对象。" \: ^0 g2 G9 Z2 N
  State 模式/ h& l; Y6 m2 j
  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。$ x6 X. T8 \! D" f' w5 x+ t$ I
  在 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-5-7 10:08 , Processed in 0.223265 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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