设计模式可以帮助用户在更高层次上抽象细节,更好地理解体系结构。如果比较熟悉 gof 设计模式和 javaserver faces (jsf) 框架,本文可以帮助您洞察 jsf 框架中使用的设计模式,深入理解其工作原理。
本文探讨了 jsf 框架中使用的设计模式。详细讨论的设计模式包括 singleton、model-view-controller、factory method、state、composite、decorator、strategy、template method 和 observer 模式。
设计模式和 javaserver faces (jsf) 技术
首先简要地介绍一下模式和 jsf 框架。
customviewhandler 类:
清单 1. customviewhandler 片段
public class customviewhandler extends viewhandler { public customviewhandler(viewhandler handler) { super(); oldviewhandler = handler; } private viewhandler oldviewhandler = null; public void renderview (facescontext context, uiviewroot view) { //delegate method to oldviewhandler oldviewhandler.renderview(context, view); } //custom implementation of calculatelocale public locale calculatelocale(facescontext context) { } }
strategy 模式
strategy 模式的目的是封装不同的概念。jsf 框架采用 strategy 模式使用委托实现模型呈现 ui 组件。jsf 技术支持两种呈现模型。在直接实现模型中,ui 组件对收到的请求中的数据进行解码,然后编码这些数据进行显示。在委托实现模型中,解码和编码操作委托给和组建关联的专门呈现器。后一种模型利用了 strategy 设计模式,比直接实现更灵活。在 strategy 模式中,将不同的算法封装在单独的对象中,从而可以动态地改变算法。jsf 实现可以用已有的 renderkit 实例注册另外的呈现器,当应用程序启动的时候,jsf 实现读取配置文件将这些呈现器和 ui 组件联系在一起。
template method 模式
template method 模式的目的是将变化的步骤推迟到子类中,而在父类中定义那些固定的算法步骤。jsf 框架通过 phraselisteners 展现了 template method 模式提供的功能。采用 template method(或者 “hook”)使得 web 作者可以为不同阶段之间的可选步骤提供实现,而主要阶段仍然和 jsf 框架的定义一致。jsf 框架提供了 phaselisteners,概念上类似于 template method 模式中的可变步骤。jsf 框架有六个预定义的阶段,在每个阶段之间,web 作者可以实现 phaselisteners 来提供类似于 template method hook 的 hook。事实上,这种结构比 template method 模式更具有扩展性。可以通过注册 phraseid 为 any_phrase 的 phaselistener 在每个阶段后提供 hook。如果 phaseid 是 any_phase,jsf 实现就会在每个阶段之前和之后调用该 phaselistener。jsf 框架中的实现略有不同,因为可以根本没有 phaselistener,但是在 template method 模式中,子类通常重新定义父类中抽象的可变步骤。
observer 模式
observer 模式的目的是当目标对象的状态改变时自动通知所有依赖的对象(即观察器)。jsf 在 ui 组件中实现了 observer 模式。jsf 有两类内建事件:actionevent 和 valuechangedevent。actionevent 用于确定用户界面组件(如按钮)的激活。当用户单击按钮时,jsf 实现通知添加到该按钮上的一个或多个动作监听程序。于是该按钮被激活,或者说按钮(主体)的状态改变了。添加到按钮上的所有监听程序(即观察器)都收到通知该主体状态已经改变。类似的,当输入 ui 组件中的值改变时,jsf 实现通知 valuechangelistener。
结束语
jsf 框架利用了 singleton、model-view-controller、factory method、state、composite、decorator、strategy、template method 和 observer 设计模式。因为它的体系结构建立在已经验证的设计模式的基础上,这是一个健壮的框架,模式在 jsf 框架中得到了很好的利用。
新闻热点
疑难解答