• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Java設計模式在基于MVC模式系統(tǒng)中的應用研究

      2014-04-29 00:00:00楊新艷蘇愛玲
      計算機光盤軟件與應用 2014年13期

      摘 要:Java設計模式是對軟件系統(tǒng)設計中常見問題的可復用的經(jīng)典解決方案。本文討論了兩種Java設計模式:工廠模式和代理模式。設計了一個使用JSP和Servlet技術實現(xiàn)的基于MVC模式的系統(tǒng)架構。并研究了這Java的兩種設計模式在該MVC模式系統(tǒng)中的應用。

      關鍵詞:工廠模式;代理模式;MVC模式

      中圖分類號:TP311.52

      1 Java設計模式

      程序的設計模式是開發(fā)人員在開發(fā)當中不斷積累,總結出來的一種可以重用的方案。設計模式建立了一系列描述如何完成軟件開發(fā)領域中特定任務的規(guī)則,設計模式識別并確定類和實例層次上或組件層次上的抽象關系[1]。Java一共有23種設計模式,在此我們討論兩種模式。

      1.1 工廠模式

      工廠模式顧名思義用來生產(chǎn)產(chǎn)品的模式。在Java語言中,要創(chuàng)建對象常見方法是用new關鍵字,工廠模式從面向對象思想出發(fā),把每次對象的創(chuàng)建看成是一個工廠生產(chǎn)一件產(chǎn)品,即把new類名()替換成工廠類調用生產(chǎn)產(chǎn)品的方法。它涉及到的角色有三種:(1)工廠類角色:是工廠模式的核心,有一定的邏輯。在Java中由具體類實現(xiàn);(2)抽象產(chǎn)品角色:是具體產(chǎn)品繼承的父類或實現(xiàn)的接口。在Java中由接口或抽象類實現(xiàn);(3)具體產(chǎn)品角色:工廠類所創(chuàng)建的對象就是此角色的實例。在Java中由具體類實現(xiàn)。

      1.2 代理模式

      代理模式指的就是一個角色代表另一個角色采取行動。在某些情況下,一個客戶不想或不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。靈活使用代理模式在實際應用中可以解決許多問題[2]。代理模式一般涉及到的角色有:(1)抽象角色:聲明真實對象和代理對象的共同接口;(2)代理角色:代理對象內部含有對真實對象的引用,從而可以操作真實對象,同時代理對象提供與真實對象相同的接口,在任何時刻都能代替真實對象;(3)真實角色:代理角色所代表的真實對象,是我們最終要引用的對象。

      代理模式又分靜態(tài)代理和動態(tài)代理,靜態(tài)代理中代理角色的一個接口只能服務于一種類型的類,動態(tài)代理不管真實角色如何變化,代理角色只需一個接口。Java在Java.lang.reflect包中提供了動態(tài)代理類,Java的動態(tài)代理可以勝任大規(guī)模程序。

      2 JSP+Servlet技術的MVC模式系統(tǒng)

      在JSP和Servlet技術實現(xiàn)的基于MVC模式的B/S系統(tǒng)中,M(Model,模型)由Java類實現(xiàn),V(View,視圖)由JSP實現(xiàn),C(Controller,控制器)由Servlet實現(xiàn)。以登錄功能為例說明MVC模式的系統(tǒng)實現(xiàn)。

      首先為登錄的用戶提供一個登錄界面login.jsp,用戶在登錄后,跳轉到LoginServlet中執(zhí)行返回成功或失敗信息。LoginServlet訪問業(yè)務層接口LoginService進行登錄流程的判斷,在該判斷過程中需要通過DAO(Data Access Object,數(shù)據(jù)訪問層)接口進行數(shù)據(jù)訪問。執(zhí)行過程如圖1所示。

      圖1 登錄執(zhí)行過程

      3 工廠模式的應用

      在上面設計的系統(tǒng)中,V層對C層的請求訪問可以通過JSP頁面的設計和web.xml的配置實現(xiàn),而C層對M層的訪問,以及在M層內部,業(yè)務邏輯類LoginService對LoginDAO的訪問都需要通過定義接口對象訪問。應用工廠模式實現(xiàn)接口對象訪問,首先創(chuàng)建抽象產(chǎn)品角色:數(shù)據(jù)訪問接口LoginDAO和業(yè)務邏輯接口LoginService;然后創(chuàng)建具體產(chǎn)品角色:也就是接口的實現(xiàn)類,分別為LoginDAOImpl和LoginServiceImpl,最后,定義工廠類角色:DAOFactory和ServiceFactory,在每次訪問接口時,都通過工廠類生產(chǎn)業(yè)務邏輯類對象和數(shù)據(jù)訪問DAO對象。

      工廠類中的方法定義為static,使用時可以直接用工廠類調用方法獲得實例對象。數(shù)據(jù)訪問類的工廠類DAOFactory具體實現(xiàn)代碼如下:

      public class DAOFactory{

      public static LoginDAO getLoginDAOInstance(Connection conn)

      {return new LoginDAOImpl(conn);}

      }

      其中Connection為數(shù)據(jù)庫連接類,將其對象做形參,可保證一次服務的數(shù)據(jù)增、刪、改、查只打開一次數(shù)據(jù)連接。

      4 動態(tài)代理模式的應用

      在軟件系統(tǒng)中經(jīng)常會有一些功能,如日志、事務管理、安全檢查等是與系統(tǒng)本身的業(yè)務無關的。如果將這些功能加入到原有的程序代碼中會使業(yè)務邏輯變得復雜,這個時候就需要代理機制來實現(xiàn)。使用動態(tài)代理模式實現(xiàn)登錄方法調用前輸出提示信息的日志功能。首先,抽象角色為接口LoginService,有l(wèi)ogin方法完成登錄;具體角色為實現(xiàn)類LoginServiceImpl,調用LoginDAO完成登錄的業(yè)務邏輯。其次使用Java提供的InvocationHandler接口,完成代理角色及代理類的定義。關鍵代碼如下:

      public class LogHandler implements InvocationHandler{

      ……

      public Object invoke(Object proxy, Method method, Object[] args) throws Throwable{

      System.out.println(\"輸出的提示信息\");

      method.invoke(sub, args);

      return 1;

      }

      }

      在代理類中,可任意增加與系統(tǒng)本身業(yè)務邏輯無關的任何代碼,在此,下劃線為日志功能代碼。代理模式相關類定義好后,在調用時需要首先使用工廠類創(chuàng)建業(yè)務層被代理對象lsi,再創(chuàng)建代理對象ls,關鍵代碼如下:

      Class cls= lsi.getClass();

      LoginService ls=(LoginService)

      Proxy.newProxyInstance (cls.getClassLoader(),cls.getInterfaces(),new LogHandler(lsi));

      ls.login();

      5 結束語

      本文討論了Java的工廠模式和代理模式在基于MVC系統(tǒng)中的具體應用,并以登錄功能為例,詳細說明了JSP和Servlet技術搭建的MVC軟件系統(tǒng)的執(zhí)行過程,以及兩種模式在登錄功能實現(xiàn)中的具體應用和關鍵代碼。Java的設計模式,是開發(fā)人員不斷積累經(jīng)驗的成果,所以在系統(tǒng)開發(fā)中,合理使用設計模式,使代碼具有可重用性,且易于他人理解。

      參考文獻:

      [1]侯瑞春,高健,劉學義.JAVA設計模式在工作流管理系統(tǒng)中的應用研究[J].微計算機信息,2010.

      [2]丁民豆.代理模式的研究與使用[J].電腦知識與技術,2011.

      作者簡介:楊新艷(1982-),女,山東青島人,研究生,講師,研究方向:計算機應用技術;蘇愛玲(1979-),女,山東青島人,研究生,講師,研究方向:計算機應用技術。

      作者單位:青島工學院,山東青島 266300

      基金項目:2013年山東省高??萍加媱澴曰I經(jīng)費項目(項目編號:J13LN78)。

      江永县| 和田市| 乌拉特后旗| 五台县| 雅江县| 兴宁市| 南投市| 石狮市| 会同县| 沈丘县| 错那县| 黎城县| 齐齐哈尔市| 留坝县| 道真| 宣化县| 讷河市| 隆尧县| 大城县| 和顺县| 昌宁县| 昭平县| 五华县| 任丘市| 库伦旗| 夏津县| 萍乡市| 南城县| 巩义市| 昭苏县| 桓台县| 桐梓县| 泸水县| 新建县| 江西省| 盱眙县| 太谷县| 潼关县| 榆树市| 晋江市| 吉林省|