設計模式可以幫助用戶在更高層次上抽象細節,更好地理解體系結構。如果比較熟悉 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 框架中得到了很好的利用。
新聞熱點
疑難解答