介绍JSF框架中使用的设计模式_第1页
介绍JSF框架中使用的设计模式_第2页
介绍JSF框架中使用的设计模式_第3页
介绍JSF框架中使用的设计模式_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、设计模式可以帮助用户在更高层次上抽象细节,更好地理解体系结构。如果比较熟悉gof设计模式和javaserver faces (jsf)框架,本文可以帮助您洞察jsf框架中使用的设计模式,深入理解其工作原理。设计模式和javaserver faces (jsf) 技术,首先简要地介绍一下模式和jsf框架。模式设计模式是对问题和解决方案进行抽象的普遍适用的方法。因为模式是所冇开发人员和架构师公认的,所以模式可以节 约时间和资源。川外行话來说,模式就是关于某个人所共知的问题的经过验证的解决方案。模式可以重用,重用使得解 决方案更健壮。java server faces» jsf体系结构是一

2、种web应用程序框架。它是java community process (jcp)推动的,有望 成为web应用程序开发的标准框架。h前用于开发web应用程序的框架冇50名个,这说明迫切需耍实现框架的标准 化,这正是jsf框架的冃标!深入剖析jse模式现在我们來讨论各种jsf体系结构中的设计模式。木文将详细讨论single ton s mode 1-v i ew-con t ro 11 er s fac t ory method、 state、composite、decorator、strategy, template method 和 observer 设计模式。我将分析每种模式的用途及其 在

3、jse框架屮的作用。singleton 模式singleton模式的冃的是保证类只有一个实例被加载,该实例提供一个全局访问点。当启动具有jsf支持的web应用 程序时,web容器初始化一个facesservlet实例°在这个阶段,facesservlet对每个web应用程序实例化 application和ijfccycle实例-次。这些实例就采用众所周知的singleton模式,通常只需要该类型的一个实例。使用jsf的web应用程序只需要application和lifecycle类的一个实例。lifecycle管理多个jsf请求的整个 生命期°因为其状态和行为在所冇请求之间

4、共亨,这些对象采用singleton模式合情合理。lifecycle维护的 phaselisteners也是singleton模式的。phaselisteners由所有jsf请求共享。在jsf框架中可以广泛使用 singleton模式,以减少内存占用和提供对象的全局访问。navigationllandler (川于确超请求的逻辑结果)和 viewhandler (用于创建视图)也是使用singleton模式的例子。model-view-controller (mvc)mvc模式的日的是从数据表示(view)中将数据(即model)分离岀来。如杲应用程序冇多种表示,可以仅替换视图层 而重用控制器

5、和模型代码。类似的,如果需要改变模型,可以在很大程度上不改变视图层。控制器处理用户动作,川户 动作可能造成模型改变和视图更新。当用户请求一个jsf页面时,请求发送到facesservlelo facesservlet是jsf使 用的前端控制器servlet。和其他很多web应用程序框架一样,jsf使用mvs模式消除视图和模型之间的耦合。为了 集中处理用户请求,控制器servlet改变模型并将用户导航到视图.facesservlet是jsf框架中所有用户请求都要经过的控制器元素。facesservlet分析用户请求使用托管bean对 模型调用各种动作。后台(backing)或托管(managed

6、) bean就是该模世的例子。jse用户界面(ui)组件是视图层 的例子。mvc模式把任务分解给具冇不同技能的开发人员,便这些任务能够同时进行,这样gui设计人员就可以使用 丰富的ui组件创建jsf贝面,同时后端开发人员可以创建托管bean来编写专门的业务逻辑代码。factory method 模式factory method模式的冃的是定义一个用于创建对象的接口,但是把对彖实例化推迟到子类中。在jsf体系结构中, factory method模式被用于创建对彖c lifecyclefactory是一个创建和返回lifecycle实例的丁厂对象。lifecyc 1 efactory 的 get

7、lifecycle (string lifecycleld)方法采用 factory method 模式,根据 lifecycleld 创 建(如果需要)并返回lifecycle实例。自定义的jsf实现可以重新定义getlifecycle抽象方法來创建自定义的 lifecycle实例。默认的jsf实现提供默认的lifecycle实例。此外,对于每个jsf请求,facesservlet都从 eaccscon text factory 得到 facescontexto eacescon text factory 是一个抽象类,公开了 getfacescontext api, jsf 实现提供了 f

8、acescontextfactory和getfacescontext api的具体实现。这是另夕卜一个使用factory method模式的 例子,具体的facescontextfactory实现创建facescontext对象。state模式state模式的冃的是在表示状态的不同类之间分配与状态有关的逻辑。facesservlet对lifcycle实例调用execute 和render方法.lifecycle协调不同的phrase以便执行jsf请求。在这里jsf实现就遵循了 state模式。如果 没有使用这种模式,lifecycle实现就会被大呈的条件(叩“if”语句)搅得一塌糊涂。jsf实

9、现为每个状态(或阶 段)创建单独的类并调用step。phase是一个抽象类,定了每个step的公共接口。在jsf框架中定义了六个phrase(即 step) : restoreviewphase applyrcquoslvaluos、processvalidationsphaso、 updatemodc1va1ucsphaseinvokcapp1i cat i onphase 和 ronderresponsephasec在state模式中,lifecycle把facescontext对象传递给phaseo每个阶段或状态改变传递给它的上下文信息,然 后设赵facescontext木身中的标志表明

10、下一个可能的步骤。jsf实现在每个步骤中改变其行为。每个阶段都可以作为 下一个阶段的起因。facescontext有两种标志renderresponse和responsecomplete可以改变执行的顺序。每个步 骤执行完成后,lifecycle检査上一阶段是否设迸了这些标志。如果设逝了 responsecomplete, lifecycle则完全放 弃请求的执行。如果经过某个阶段后设迸了 renderresponse标志,jsf就会跳过剩下的阶段而垃接进入render response阶段。如果这两个标志都没有设置lifecycle就会按顺序继续执行下一步。composite 模式compo

11、site模式让客户代码能够统一处理复合对象和基木对象。复合对彖是基木对彖的容器。在第一阶段(restore view 阶段)和最后一个阶段(render response 阶段),使用 jsf ui 组件构造 ui view0 ui component base 就是 composite 模式中component抽象类的一个例子o uiviewrool是composite类,而uloutput (比方说)就是叶子(或者基本类)°uicomponentbase类定义了叶了和复合对象的公共方法,如编码/解码值和了节点管理函数。子节点管理函数,如 getchildren,对于叶子节点返回空

12、列表,对于复合节点则返回其子节点。decorator 模式decorator模式的冃的是不通过子类化动态扩展对象的行为。jsf框架有很多扩展点(r卩可插入机制)。jsf实现可使 用 decorator 模式替换默认的 propertyreso 1 ver, variab 1 ereso 1 veractionlistonerx navigationhandler viewiiandler或statemanagero通常自定义实现接受通过构造闻数传递给它的默认实现的引用。自定义实现仅仅改写 功能的一个了集,而将英他功能委托给默认实现。如果希望实现自定义的viewiiandler,改写默认view

13、iiandler实现 的calculatelocale方法,可以像淸单1那样编写customviewhand 1 er类:strategy 模式strategy模式的冃的是封装不同的概念。jsf框架采用strategy模式使用委托实现模型是现ui组件。jsf技术支 持两种呈现模型。在立接实现模型中,ui组件对收到的请求中的数据进行解码,然后编码这些数据进行显示。在委托 实现模型屮,解码和编码操作委托给和组建关联的专门呈现器。后一种模型利用了 strategy设计模式,比直接实现更 灵活。在strategy模式中,将不同的算法封装在单独的对象中,从而可以动态地改变算法。jsf实现可以用已有的 r

14、enderkit实例注册另外的呈现器,当应用程序启动的时候,jsf实现读取配置文件将这些呈现器和ui组件联系在一 起。template method 模式template method模式的冃的是将变化的步骤推迟到了类中,而在父类中定义那些固定的算法步骤。jsf框架通过phraselisteners 展现了 template method 模式提供的功能。采用 template method (或者"hook")使得 web 作 者可以为不同阶段之间的可选步骤提供实现,而主要阶段仍然和jsf框架的定义一致。jsf框架提供了 phaselisteners,概念上类似于temp

15、late method模式中的可变步骤。jsf框架有八个预定义的阶段,在每个阶段之 间,web作者可以实现phaselisteners來提供类似于template method hook的hooko事实上,这种结构比template method模式更具有扩展性。可以通过注册phraseld为any_phrase的phaselistener在每个阶段后提供hook。如 果phaseld是any_pi1ase, jsf实现就会在每个阶段之前和之后调用该phaselistener。jsf框架中的实现略有不同, 因为可以根本没有phaselistener,但是在template method模式中,子类通常重新定义父类中抽象的可变步骤。observer 模式observer模式的日的是当日标对象的状态改变时自动通知所冇依赖的对象(即观察器)° jsf在ui组件中实现了 observer模式。jsf有两类内建事件:actionevent和va 1 uechangedevent<. actionevent用于确定用户界面组件(如 按钮)的激活。当川户单击按钮时,jsf实现通知添加到该按钮上的一个或多个动作监听程序。于是该按钮被激活,或 者说按钮(主体)的状态改变了。添加到按钮上的所有监听程序(叩观察器都收到通知该

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论