設計模式學習

本文學習自IBM技術中心,禁止任何轉載!

模式應該是穩定的實體。根據定義,一個模式在軟件設計中必須出現三次或更多次,才能將其確定爲模式。
常見的模式有:商業模式、web表現模式和J2EE模式。

Property Container 模式
Property Container 是基本模式。它的功能是確保構建和部署應用程序之後,可以動態地擴展它們。簡言之,該模式就是基於對象化容器,通過接口的繼承,並可在容器內遍歷所有對象。
參看下圖,很好說明這一模式:
PropertyContainerClassDiagram

Simple Policy 模式
Simple Policy 模式類似於 GOF 的 Strategy 設計模式,但它專門處理實際業務。Simple Policy 模式允許動態設置和實施應用程序的訪問策略。

例如,比方說一家在線的影片商店希望實施一項策略 ― 根據影片級別限制向未成年人銷售影片。但是商店的主管們還未制定出一項策略,因此,“影片訂購”應用程序必須足夠靈活以便能容易地更改策略。此外,影片級別有時候會發生變化,所以當有訂單時,應用程序必須能夠考慮新的級別範圍或標準。所有這一切意味着用於驗證特定顧客已經達到可以訂購特定影片年齡的規則應該被認爲是可變的代碼。當商店策略或業界等級評定系統發生變化時,無需重新編譯新代碼,而是可以容易地分離出可變代碼,並允許其動態更改。這就是 Simple Policy 模式的本質工作。

Repeated Menu 模式

如果頁面內容不得不超出一屏,菜單將在 Web 頁面上重複顯示。儘管這似乎是一條常識性規則,但是許多網站並不遵守。
可簡單的通過tag來做到這一點。

J2EE設計模式

一般的網站,其頁面流向是線性和單向的,頁面數據不會隨用戶輸入而發生變化,
但這種模型對企業應用程序而言是不現實的。在企業應用程序中,頁面視圖更多地是基於頁面數據的基本狀態,而不是靜態模型。考慮到企業事務的所有不定因素,很難預知每個用戶會如何瀏覽系統。使用 Front Controller 機制進行集中頁面管理,可以創建更動態的、更可服務的 Web 應用程序。

使用 Front Controller 時,鏈接並未指向特定的目標,如“home.jsp”或者“movies.jsp”。相反,它們用來表明用戶想要執行的操作,如轉向主頁、更改影片訂單或者查看可訂購影片的清單。然後,Front Controller 就會對數據模型做任何必要的調整,並把操作解釋到具體的頁面視圖中,該視圖會返回給用戶。
舉例來說,可以通過 /s201/frontControllerServlet/home 這樣的url把所有請求提交給FrontController這個servlet,然後在這個servlet中判斷,
String path = request.getPathInfo();
if(path==null){
              // if the path is null, it is a URL: /s201/frontcontroller
              //  so take the user to the entry page
              session.setAttribute(WebKeys.CurrentPage, "/movieentry.jsp");
          } else if(path.endsWith("movies")){
              // if the path is /Patterns201/frontcontroller/movies, then the
              //  user is in the movie portion of the Web where the current
              //  view is based entirely on the datamodel.
              // retrieve the list of ordered movies
              Vector moviesOrdered = (Vector)session.getAttribute(
                  WebKeys.MoviesOrdered);
              if(moviesOrdered==null){
                  // if there is not an order, then the user needs to order
                  //  some movies before they go further
                  session.setAttribute(WebKeys.CurrentPage, "/ordermovies.jsp");
              } else {
            ...............................

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章