《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 設計應用 > 基于AOP策略模式的實現機制
基于AOP策略模式的實現機制
2016年微型機與應用第1期
江華麗
(福建師范大學 閩南科技學院,福建 泉州 362332)
摘要: 在當前軟件需求越來越復雜的時代,策略模式作為23種經典的設計模式之一,它有著其重要的發揮舞臺。本文首先將傳統基于OOP策略模式的局限性進行分析說明,提出基本的策略模式以及“鏈式”策略模式基于AOP的具體實現,解決傳統策略模式可能出現的代碼分散、代碼混亂問題;接著進行復雜度方面的實驗對比分析;最后分析基于AOP的策略模式可能的應用場景。
Abstract:
Key words :

  摘要:在當前軟件需求越來越復雜的時代,策略模式作為23種經典的設計模式之一,它有著其重要的發揮舞臺。本文首先將傳統基于OOP策略模式的局限性進行分析說明,提出基本的策略模式以及“鏈式”策略模式基于AOP的具體實現,解決傳統策略模式可能出現的代碼分散、代碼混亂問題;接著進行復雜度方面的實驗對比分析;最后分析基于AOP的策略模式可能的應用場景。

  關鍵詞:策略模式;AOP;設計模式

0引言

  模式(Pattern)一詞最初出現在建筑學領域上,素有“模式之父”之稱的美國加利福尼亞大學Christopher Alexander博士給出其經典的定義:每個模式都描述環境中不斷出現的問題,提出該問題的解決方案的核心。通過這種方式,可以無數次地使用那些已有的解決方案,無須再重復相同的工作[1-3]。設計模式(Design Pattern),即是一種方法論,是前人經過無數次實踐,加以分類、整理,并從中提取出的在特定場景下解決一般設計問題的方法總結??梢哉f它是一種解決一類特定問題的模板或者現在所說的最佳實踐。設計模式的提出與應用,使得在軟件開發過程中,編寫的代碼更加容易被人理解,代碼更加可靠。OOP(面向對象編程)與設計模式的目的皆是為了使代碼獲得更強大的可復用性等,這使得兩者進行無縫的連接。當前設計模式幾乎都是基于OOP上實現的,而策略模式是設計模式的[1]其中一種。策略模式在OOP上的實現技術雖然已經可以解決策略模式在開發過程中出現的大部分問題和需求,但是隨著軟件開發需求越來越多,業務邏輯越來越復雜,在解決一些復雜的需求時,策略模式這種基于OOP的實現越來越顯示出它的局限性。OOP這種面向對象編程的思想,雖然解決了軟件開發中劃分角色的問題,實現軟件的模塊化設計,但其定義的是一種從上到下的關系,當在解決從左到右的關系時卻顯得很無力。如在實現系統中各個模塊都存在的公共功能,例如日志、安全性、性能監測、異常捕獲等時,如果仍用OOP技術,就可能導致代碼混亂、分散等問題,從而導致代碼可讀性差,代碼質量低,可復用性、可擴展性差。AOP就是一種有效可行的解決方案,它是一種“橫切”的技術,通過把上述公共功能封裝成一個獨立的模塊即稱之為“切面”[4-6],然后把它織入到各個模塊中。本文就當前較為流行、使用較為廣泛的設計模式之一——策略模式,探討其在AOP下的實現。

1策略模式

  11策略模式結構

  當前,設計模式種類最為經典的有23種,可以歸納分為三大類,即創建型模式、行為型模式和結構型模式。策略模式為行為型模式之一,它定義一系列算法,并且將這一系列的算法封裝成為策略類,使這些策略類相互獨立又可以相互替換,向外則提供公共的接口即策略接口。策略類的調用完全取決于調用者,這使得當需求或者說策略算法發生改變時,只需新增策略類,而無需修改其他代碼,從而不會影響到用戶,使得策略類獨立于用戶而變化。總的來說,策略模式是對算法的包裝,是把使用算法的責任和算法本身分離開來,委派給不同的對象管理[7]。策略模式定義以下三種角色,其結構圖如圖1所示。

  

001.jpg

  策略模式提倡“針對接口編程”的模式,而使用接口的目的是為了統一標準或者說是指定一種強制的規定[3]。使用策略模式是由用戶/開發者發起并根據其具體的需求、具體的操作決定調用哪種具體的策略類。當前,策略模式的使用十分廣泛,例如:JDK中的Comparable、Comparator接口,Swing中的布局管理器LayoutManager,邊界類Border等。

12AOP

  AOP(Aspect Oriented Programming)即面向切面編程,是近些年來開始流行的一種新的編程范式。AOP為開發者提供一種描述橫切關注點的機制,并能夠自動將橫切關注點織入到面向對象的軟件系統中,從而實現了橫切關注點的模塊化[8]。AOP的結構圖如圖2所示。

  

002.jpg

  AOP可以說是OOP的一種改進或者補充。OOP能夠很好地實現軟件開發中類從上到下的縱向關系,解決模塊功能的角色劃分問題,使得很多的關注點都模塊化。然而,OOP在處理橫向問題即橫切關注點時將會出現代碼交織/混亂、代碼分散等問題。其實質在于OOP傾向處理的是“一維空間”的問題,而橫切關注點則是將其變成二維空間上的問題,這使得OOP在實現二維問題時使用很糟糕的映射。當前,實現AOP技術有很多,如AspectJ,Aspect Werkz,AspectC++,Jboss AOP,Spring AOP,AOP/ST,DynInst,Nanning等。從編織的方式可以分為靜態編織和動態編織;從編織的時刻可以分為編譯時編織、載入時編織和運行時編織三大類別。而實現AOP技術的實質即動態代理?,F在比較流行的實現動態代理的模式主要有:JDK動態代理和CGLIB動態代理。本文將使用Spring AOP框架實現AOP技術[9]。

2策略模式在AOP具體實現

  AOP(面向切面編程)比較擅長處理那些分散在各個模塊中又有別于核心業務關注點的公共功能需求,例如日志、安全性、性能監測、異常捕獲等。下面將以各個模塊中的日志處理為例進行討論。在軟件開發特別是WEB開發中,經常采用MVC模式,而DAO層一般用來作為數據訪問層。操作數據無非就是增刪改查操作,在增刪改查數據時應對其進行日志生成,操作數據日志又可細分為增、刪、改、查4種日志,即4種日志策略,部分實現代碼如下:

  //日志策略接口

  public interface LogStrategy {

  public void log();

  }

  //保存數據日志策略實現類

  public class LogStrategyImpSave implements LogStrategy{

  private Loggerlogger = Logger.getLogger(this.getClass());

  @Override

  //其他策略實現類只需分別實現log方法,其他地方相同

  public void log() {

  logger.info("保存數據...");

  // 定義處理保存數據日志的切面類

  public class UserSaveDaoAspect {

  private LogStrategy logStrategy; //getter、setter方法省略

  //環繞通知

  @Around(value="pointCutMehtod()")

  publicvoid around(ProceedingJoinPoint pjp){try {Object object= pjp.proceed();

  21分析

  當需求發生變化如增刪改查日志的格式改變了,這時只需新增實現日志策略接口LogStrategy,并根據需求實現里面的方法,然后在配置文件中注冊類的bean信息并修改注入到logStrategy屬性的信息,而不需要修改其他類的代碼,這也符合軟件開發的“修改封閉,擴展開放”的原則。

  22與傳統基于OOP的策略模式對比

  上述舉例為J2EE軟件開發中DAO層的日志處理,而事實上在其他分層中如service層、action層等很多地方都需要日志處理。對于傳統的基于OOP的策略模式則需要在每一處都調用日志策略具體實現類的方法,這種重復的工作使得代碼看起來臃腫、不易于維護,即代碼混亂、代碼分散;而對于基于AOP的策略模式則只需定義好切面類和切入點,并在切面類中的環繞通知里調用公共功能,這里即為日志處理的方法,并配置好配置文件信息即可,而不需要在每處進行日志處理。

  對于較為復雜的策略模式,如在處理復雜業務需求時,往往不僅使用一個策略實現類,而且需要使用多組策略類別下的策略實現類才能實現需求??梢越Y合設計模式中另外一種模式即責任鏈模式,把策略模式改裝為“鏈式”策略模式。

3對比分析

  通常用軟件的復雜度來評價一個軟件/算法的好壞,即“簡單就是可靠的”。本文將使用下面4個指標來對比和評價傳統的基于OOP的策略模式與基于AOP的策略模式。

 ?。?)圈復雜度(CC):用于衡量模塊中的判定結構的復雜程度。圈復雜度越大其質量一般越低,越難以維護。業界標準一般小于等于15。

 ?。?)扇出復雜度(FOC):用于衡量模塊間的層次調用(調用下級模塊)情況。扇出復雜度高,則表示模塊的復雜度高,需要控制和協調過多的下級模塊。業界標準一般小于等于20。

 ?。?)無注解編碼語句(NCSS):在文件、類和方法中一般分別小于等于2 000、1 500、50。

 ?。?)N條路徑復雜度(NPath):表示一個方法中各種可能的執行路徑總和。業界標準一般小于等于200。

  本節將測試上述第2節中實現的例子即J2EE軟件開發中的日志處理,其各個復雜度指標的實驗數據如表1所示。表1各個復雜度指標實驗數據模式CCFOCNCSSNPath基于OOP的策略模式16171 328185基于AOP的策略模式7111 042137

003.jpg

  從表1可以看出,基于AOP的策略模式相對于傳統的基于OOP的策略模式在各個復雜度指標上都大大降低。因為基于AOP的策略模式把分散在各個模塊中的公共功能的業務邏輯封裝成一個切面類,然后再織入到各個模塊中,而不是如傳統的基于OOP的策略模式那樣直接在各個模塊中重復編寫那些公共功能的實現,大大降低了代碼的復雜度。這也表明基于AOP的策略模式很好地解決了傳統的基于OOP的策略模式出現的代碼分散、代碼混亂的問題,是軟件開發中對于在各個模塊中都有的公共功能問題的很好的解決方案。

4應用場景

  策略模式將一系列的策略算法封裝成相互獨立又可相互替換的“針對接口編程”的模式,而AOP是一種擅長于處理橫向關系,將各個模塊中有別于核心業務關注點的公共功能局部化、模塊化的新的編程范式,兩者皆是為了提高軟件的可擴展性、可復用性?;贏OP的策略模式不僅在處理軟件中橫向關系需求時顯得游刃有余,并且使得軟件開發中開發人員各司其職。某一領域的專家不可能同時對加密、性能、同步、訪問控制、分布等都熟悉精通,而只需知道對應的功能接口的調用就可以?;贏OP的策略模式可以應用在以下方面:

  (1)系統中模塊間的公共功能,且未來可能發生需求變化。如日志、安全性、性能監測、異常捕獲、認證、加密等。

  (2)模塊間的插件。各個插件即是各種算法功能的策略實現類,也可在其中添加“鉤子”函數,使插件具備可插拔。

  (3)模塊間的個性化定制。個性化的定制是未來對用戶最具魅力的功能,也是未來個性化軟件的方向。事先將各種個性化選擇封裝在策略實現類中,其基于AOP的實現使得個性化的選擇效果應用在各個模塊中。

5結論

  基于OOP的策略模式雖然已經可以很好地實現策略模式,將一系列策略算法封裝成相互獨立、相互可替換的策略實現類,大大提高軟件的可重用性和可擴展性,但是由于OOP本身存在的局限性即在解決軟件需求中橫向關系時可能出現代碼混亂、代碼分散等問題,使得基于OOP的策略模式在處理這類問題時代碼可讀性差、效率低、代碼質量差、代碼重用率低以及難以維護難以擴展等。本文利用AOP處理橫切關注點的優勢,提出基于AOP的策略模式,很好地解決了傳統基于OOP的策略模式的問題。

參考文獻

 ?。?] 張海翔,秦翼. 從Java類庫看設計模式[J]. 電子世界, 2013(22):13-14.

  [2] 張舒晉. 嵌入式軟件實用設計模式[J]. 自動化應用, 2015(1):36-38.

 ?。?] 劉新強,韓陽峰. 基于AOP技術的郵件日志系統研究[J]. 電子設計工程,2014,22(18):45-48.

 ?。?] 幸德波. 基于AOP的J2EE應用程序性能監控系統研究與實現[D]. 杭州:浙江大學,2014.

  [5] 趙文杰. 基于AOP的異常處理研究與應用[J]. 計算機光盤軟件與應用,2014(24):66-68.

 ?。?] 蔣廷耀,王訓宇,關國翔,等. 一種策略模式的AOP實現及應用[J]. 計算機應用與軟件,2010,27(1):121-123.

  [7] 薛冰. 改進AOP技術在軟件開發中的應用與研究[D]. 大連:大連交通大學,2013.

 ?。?] 陳發堂,牛勇清,韓娜娜,等.協議一致性測試平臺的搭建及仿真實現[J].電子技術應用,2014,40(4):137-140.

 ?。?] 宋建華,稅光澤.無線傳感器網絡的數據安全與隱私保護[J].微型機與應用,2013,32(3):4-6.


此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          午夜精品福利在线| 伊人成综合网伊人222| 一区二区在线视频播放| 蜜桃精品久久久久久久免费影院| 亚欧美中日韩视频| 你懂的一区二区| 国产精品人成在线观看免费| 午夜视频精品| 国产精品久在线观看| 国产综合久久| 亚洲综合999| 国产日韩专区在线| 狠狠久久婷婷| 亚洲欧洲精品一区二区三区不卡| 亚洲无人区一区| 亚洲电影免费观看高清完整版在线观看| 免费成人美女女| 国产欧美在线看| 欧美~级网站不卡| 亚洲精品日韩在线观看| 亚洲激情成人网| 欧美一级在线播放| 日韩系列欧美系列| 亚洲欧美卡通另类91av| 久热这里只精品99re8久| 久久超碰97中文字幕| 欧美在线一区二区三区| 欧美高清在线播放| 国产乱码精品一区二区三区不卡| 国产精品一级在线| 亚洲青涩在线| 亚洲一区欧美激情| 欧美理论在线| 免费成人性网站| 国产精品久久久久影院色老大| 欧美色图五月天| 香蕉久久夜色| 国产三级精品在线不卡| 亚洲国产天堂久久综合网| 亚洲黄色一区二区三区| 国产精品久久久对白| 在线成人免费视频| 国产精品综合av一区二区国产馆| 毛片基地黄久久久久久天堂| 亚洲高清在线精品| 国产日韩在线不卡| 欧美一区二区免费| 国产一区二区精品久久| 国产视频久久久久| 欧美日韩国产综合一区二区| 欧美日韩在线直播| 亚洲精品久久久久久一区二区| 欧美一区二区三区四区在线| 国产视频丨精品|在线观看| 欧美系列电影免费观看| 久久夜色精品一区| 国产精品久久亚洲7777| 亚洲女与黑人做爰| 欧美高清视频一区| 国产精品色网| 国产亚洲福利| 伊人久久大香线蕉av超碰演员| 亚洲自拍偷拍一区| 国产精品永久免费在线| 狠狠色丁香婷婷综合影院| 国产亚洲成精品久久| 国产伦理精品不卡| 狠狠综合久久av一区二区小说| 久久精品中文字幕一区二区三区| 国产精品日日摸夜夜添夜夜av| 国产午夜精品在线观看| 在线一区欧美| 国产婷婷一区二区| 国产精品99久久不卡二区| 欧美激情二区三区| 欧美大尺度在线| 国产精品久久久久影院亚瑟| 精品动漫一区二区| 欧美激情久久久久| 亚洲第一区在线观看| 两个人的视频www国产精品| 国产欧美日韩专区发布| 欧美日韩国产小视频| 国产精品自在欧美一区| 国产欧美日韩激情| 在线播放国产一区中文字幕剧情欧美| 国产精品99久久不卡二区| 国产精品久久久久久妇女6080| 欧美人牲a欧美精品| 久久女同互慰一区二区三区| 国产伊人精品| 尤妮丝一区二区裸体视频| 亚洲国产一成人久久精品| 久久国产欧美日韩精品| 国产精品草草| 亚洲欧美日韩在线不卡| 久久久蜜臀国产一区二区| 欧美激情亚洲精品| 亚洲精品在线看| 国产伦精品一区二区三区照片91| 久久成人18免费网站| 国产精品美女| 欧美天堂亚洲电影院在线播放| 欧美日韩精品一本二本三本| 久久婷婷av| 欧美日本亚洲| 午夜精品久久久久久久男人的天堂| 国产精品久久久久久久久久免费看| 久久精品一区二区国产| 午夜亚洲激情| 国产自产女人91一区在线观看| 国产主播精品| 在线免费一区三区| 欧美成年人在线观看| 欧美三级在线视频| 久久久亚洲午夜电影| 国产精品伦理| 国产精品夜夜嗨| 久久男人av资源网站| 国产精品九九久久久久久久| 国产裸体写真av一区二区| 欧美色区777第一页| 极品裸体白嫩激情啪啪国产精品| 国内精品久久久久久久影视麻豆| 欧美一区高清| 黄色成人av在线| 欧美一级片久久久久久久| 亚洲少妇在线| 欧美日韩黄色大片| 国产日韩在线视频| 国产精品国产亚洲精品看不卡15| 国产精品欧美久久| 欧美日韩另类国产亚洲欧美一级| 亚洲精品久久久久久久久| 久久夜色精品国产欧美乱| 在线视频中文亚洲| 亚洲狼人精品一区二区三区| 久久久久久电影| 亚洲婷婷在线| 香蕉国产精品偷在线观看不卡| 国产亚洲欧美另类中文| 精品成人国产| 欧美中文字幕视频在线观看| 亚洲欧美视频一区二区三区| 宅男噜噜噜66一区二区66| 国产亚洲精品久久飘花| 亚洲高清在线视频| 日韩视频在线观看| 欧美综合77777色婷婷| 在线亚洲精品福利网址导航| 中文亚洲免费| 欧美精品一卡| 国内成人精品2018免费看| 国产亚洲午夜| 久久久久国色av免费观看性色| 欧美chengren| 欧美日韩三级一区二区| 欧美激情精品久久久久久| 欧美日韩国产精品自在自线| 狠狠噜噜久久| 一区二区av在线| 国产一区二区精品久久91| 欧美三级在线播放| 欧美精品在欧美一区二区少妇| 国内精品**久久毛片app| 亚洲国产精品第一区二区| 一区二区三区久久| 欧美一区二区在线看| 日韩午夜在线电影| 欧美sm极限捆绑bd| 国产精品成人免费视频| 国产一区二区主播在线| 一本综合久久| 国产主播一区二区三区| 国产精品乱子久久久久| 日韩亚洲欧美在线观看| 尤物99国产成人精品视频| 国产视频一区欧美| 欧美专区日韩专区| 国产精品色在线| 欧美日一区二区在线观看| 国产精自产拍久久久久久| 在线观看国产成人av片| 国产农村妇女精品一区二区| 欧美在线free| 久久久久国产精品厨房| 国产精品久久久久久久久果冻传媒| 亚洲精品美女免费| 尤物视频一区二区| 欧美一区二区在线观看| 国产精品久久久久久久久借妻| 激情av一区| 欧美一二三区在线观看| 久久精品99久久香蕉国产色戒| 国产日韩视频一区二区三区| 一区在线免费| 久久女同互慰一区二区三区| 狠狠久久婷婷| 国内一区二区三区在线视频| 国产精品久久久久久久久免费桃花| 国产精品麻豆欧美日韩ww| 夜夜躁日日躁狠狠久久88av| 国产精品伊人日日| 国产精品亚洲视频| 亚洲欧美国产日韩中文字幕| 欧美小视频在线观看| 欧美精品v国产精品v日韩精品| 久久精品国内一区二区三区| 国产精品久久久久av免费| 欧美不卡一卡二卡免费版| 亚洲狼人精品一区二区三区| 国产精品每日更新在线播放网址| 亚洲美女诱惑| 欧美日韩日日夜夜| 亚洲欧美日本视频在线观看| 午夜精彩国产免费不卡不顿大片| 欧美激情二区三区| 国产精品二区二区三区| 亚洲欧美激情一区二区| 亚洲精品国产欧美| 国产综合自拍| 国产精品久久亚洲7777| 99综合电影在线视频| 久久久久久久尹人综合网亚洲| 亚洲一二三区在线| 国产亚洲视频在线观看| 亚洲激情电影在线| 亚洲国产精品毛片| 蜜臀a∨国产成人精品| 一本色道88久久加勒比精品| 国产视频一区二区三区在线观看| 久久亚洲午夜电影| 免费欧美在线视频| 欧美激情免费在线| 麻豆9191精品国产| 国产亚洲人成a一在线v站| 久久蜜桃精品| 久久人人97超碰人人澡爱香蕉| 欧美日韩精品在线观看| 欧美精品v日韩精品v国产精品| 国外成人免费视频| 久久综合婷婷| 欧美激情视频网站| 欧美久久久久久蜜桃| 国产日本欧美一区二区三区在线| 美女啪啪无遮挡免费久久网站| 欧美成年人视频网站| 一区二区三区视频免费在线观看| 久久在精品线影院精品国产| 国产精品亚洲第一区在线暖暖韩国| 欧美电影免费观看网站| 亚洲影音先锋| 欧美一区二区三区免费视| 日韩一区二区久久| 欧美精品v日韩精品v国产精品| 欧美日韩在线亚洲一区蜜芽| 国产精品美女999| 欧美另类一区二区三区| 永久免费毛片在线播放不卡| 最新国产乱人伦偷精品免费网站| 99热精品在线观看| 久久精品一区二区国产| 免费观看成人鲁鲁鲁鲁鲁视频| 国产亚洲欧洲一区高清在线观看| 欧美福利一区二区| 欧美一区在线直播| 免费试看一区| 国产精品99久久久久久宅男| 欧美天天影院| 国产精品视频免费观看www| 久久天天躁狠狠躁夜夜av| 亚洲欧美久久久久一区二区三区| 韩国女主播一区二区三区| 欧美一区二区视频在线观看2020| 亚洲一区二区三区三| 国产精品久久国产精麻豆99网站| 欧美激情精品久久久久久久变态| 欧美人与禽猛交乱配| 欧美日韩在线播放三区| 欧美日韩一区二区三区在线| 狠狠色噜噜狠狠色综合久| 欧美国产亚洲另类动漫| 久久亚洲午夜电影| 久久久国产一区二区三区| 欧美日韩在线大尺度| 精品不卡在线| 欧美不卡视频一区| 久久久久综合一区二区三区| 欧美日韩另类丝袜其他| 欧美成人精品在线播放| 国产精品高清一区二区三区| 亚洲国产天堂久久国产91| 欧美一区二区三区免费看| 亚洲一区二区三区精品动漫| 欧美日韩精品久久久| 麻豆九一精品爱看视频在线观看免费| 久久久久一区| 欧美.日韩.国产.一区.二区| 久久夜色精品国产欧美乱| 亚洲国产一区在线| 欧美精品aa| 日韩视频―中文字幕| 亚洲国产精品久久久久久女王| 亚洲日韩欧美一区二区在线| 国产精品久久二区二区| 欧美日韩无遮挡| 一区二区国产在线观看| 欧美一区二区精品在线| 久久人人爽人人| 国产伦精品一区二区三区照片91| 亚洲欧美福利一区二区| 亚洲国产一区二区三区青草影视| 欧美精品久久久久久| 亚洲成在人线av| 亚洲欧美怡红院| 亚洲亚洲精品三区日韩精品在线视频| 欧美激情精品久久久久| 亚洲第一精品福利| 国产欧美欧洲在线观看| 久久成人精品电影| 欧美成人在线网站| 一区二区日韩欧美| 亚洲激情成人网| 中日韩高清电影网| 久久免费视频网站| 欧美在线国产精品| 亚洲精品资源| 欧美三级资源在线|