深入剖析 jsf 模式
現在我們來討論 jsf 體系結構中的各種設計模式。本文將詳細討論 singleton、model-view-controller、factory method、state、composite、decorator、strategy、template method 和 observer 設計模式。我將分析每種模式的用途及其在 jsf 框架中的作用。
singleton 模式
model-view-controller (mvc)
mvc 模式的目的是從資料表示(view)中將資料(即 model)分離出來。如果應用程式有多種表示,可以僅替換檢視層而重用控制器和模型**。類似的,如果需要改變模型,可以在很大程度上不改變檢視層。控 製器處理使用者動作,使用者動作可能造成模型改變和檢視更新。當使用者請求乙個 jsf 頁面時,請求傳送到 facesservlet。facesservlet 是 jsf 使用的前端控制器 servlet。和其他很多 web 應用程式框架一樣,jsf 使用 mvs 模式消除檢視和模型之間的耦合。為了集中處理使用者請求,控制器 servlet 改變模型並將使用者導航到檢視。
facesservlet 是 jsf 框架中所有使用者請求都要經過的控制器元素。facesservlet 分析使用者請求,使用託管 bean 對模型呼叫各種動作。後台(backing)或託管(managed)bean 就是該模型的例子。jsf 使用者介面(ui)元件是檢視層的例子。mvc 模式把任務分解給具有不同技能的開發人員,使這些任務能夠同時進行,這樣 gui 設計人員就可以使用豐富的 ui 元件建立 jsf 頁面,同時後端開發人員可以建立託管 bean 來編寫專門的業務邏輯**。
factory method 模式
state 模式
composite 模式讓客戶**能夠統一處理復合物件和基本物件。復合物件是基本物件的容器。在第一階段(restore view 階段)和最後乙個階段(render response 階段),使用 jsf ui 元件構造 ui view。uicomponentbase 就是 composite 模式中 component 抽象類的乙個例子。uiviewroot 是 composite 類,而 uioutput(比方說)就是葉子(或者基本類)。uicomponentbase 類定義了葉子和復合物件的公共方法,如編碼/解碼值和子節點管理函式。子節點管理函式,如 getchildren,對於葉子節點返回空列表,對於復合節點則返回其子節點。
decorator 模式
清單 1. customviewhandler 片段
}//custom implementation of calculatelocale public locale
calculatelocale(facescontext context)
}strategy 模式
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 框架中得到了很好的利用。
JUnit中使用到的設計模式
1.junit在testcase中應用了模板方法模式 public void runbare throws throwablefinally 2.junit在testcase類中應用了介面卡 adapter 模式 public void runbare throws throwable catch ...
實戰中使用設計模式 簡單工廠模式
1.簡單工廠模式是屬於建立型模式,又叫做靜態工廠方法模式。它的實現方式是由乙個工廠類根據傳入的引數,動態決定應該建立哪乙個產品類 這些產品類繼承自乙個父類或介面 的例項。2.簡單工廠模式由三種角色組成 3.場景 4.實現 我們將建立乙個 paymentmethod 介面和實現 paymentmeth...
Spring中使用設計模式(一 策略模式)
前幾天看到新來的同事桌上有一本設計模式的書,想起許多年前自己啃厚厚的模式時,始終昏昏欲睡,不得要領那段時光。重整思路,結合spring,寫下現在在開發中常用的設計模式使用方式。在工作中最常用的就是策略模式了,也可以說是策略模式的簡化版。客戶端可以決定用那種策略,呼叫上下文,上下文使用具體策略做具體的...