999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于AOP策略模式的實現機制*

2016-04-13 09:52:15江華麗
網絡安全與數據管理 2016年1期
關鍵詞:策略

江華麗

(福建師范大學 閩南科技學院,福建 泉州 362332)

基于AOP策略模式的實現機制*

江華麗

(福建師范大學 閩南科技學院,福建 泉州 362332)

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

策略模式;AOP;設計模式

0 引言

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

1 策略模式

1.1 策略模式結構

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

圖1 策略模式結構圖

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

1.2 AOP

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

圖2 AOP結構圖

AOP可以說是OOP的一種改進或者補充。OOP能夠很好地實現軟件開發中類從上到下的縱向關系,解決模塊功能的角色劃分問題,使得很多的關注點都模塊化。然而,OOP在處理橫向問題即橫切關注點時將會出現代碼交織/混亂、代碼分散等問題。其實質在于OOP傾向處理的是“一維空間”的問題,而橫切關注點則是將其變成二維空間上的問題,這使得OOP在實現二維問題時使用很糟糕的映射。當前,實現AOP技術有很多,如AspectJ,Aspect Werkz,AspectC++,Jboss AOP,Spring AOP,AOP/ST,DynInst,Nanning等。從編織的方式可以分為靜態編織和動態編織;從編織的時刻可以分為編譯時編織、載入時編織和運行時編織三大類別。而實現AOP技術的實質即動態代理。現在比較流行的實現動態代理的模式主要有: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 Logger logger = 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的策略模式則只需定義好切面類和切入點,并在切面類中的環繞通知里調用公共功能,這里即為日志處理的方法,并配置好配置文件信息即可,而不需要在每處進行日志處理。

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

3 對比分析

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

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

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

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

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

本節將測試上述第2節中實現的例子即J2EE軟件開發中的日志處理,其各個復雜度指標的實驗數據如表1所示。

表1 各個復雜度指標實驗數據

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

4 應用場景

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

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

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

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

5 結論

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

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

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

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

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

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

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

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

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

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

The strategy pattern based on AOP implementation

Jiang Huali1

(Minnan Institute of Science and Technology,Fujian Normal University,Quanzhou 362332, China)

Strategy pattern is one of 23 kinds of classic design patterns. The strategy pattern has its important position in the stage. This paper firstly introduces the limitation of the traditional strategy mode based on OOP analysis, then puts forward the basic strategy of model and the ‘chain’ strategy based on concrete implementation of the AOP, which solves the traditional strategy pattern’s problems, such as code scattered and code disorder. Finally ,through the experiment analysis, it analyzes the prospective strategy pattern application.

strategy pattern;AOP;design mode

福建省教育廳項目(JB11266)

TN311

A

1674-7720(2016)01-0009-03

江華麗.基于AOP策略模式的實現機制[J].微型機與應用,2016,35(1):9-11.

2015-09-07)

江華麗(1985-),女,研究生,講師,主要研究方向:電子和通信等。

猜你喜歡
策略
基于“選—練—評”一體化的二輪復習策略
幾何創新題的處理策略
求初相φ的常見策略
例談未知角三角函數值的求解策略
我說你做講策略
“我說你做”講策略
數據分析中的避錯策略
高中數學復習的具體策略
數學大世界(2018年1期)2018-04-12 05:39:14
“唱反調”的策略
幸福(2017年18期)2018-01-03 06:34:53
價格調整 講策略求互動
中國衛生(2016年8期)2016-11-12 13:26:50
主站蜘蛛池模板: 性69交片免费看| 亚洲αv毛片| 日韩人妻无码制服丝袜视频| jizz在线观看| 欧美曰批视频免费播放免费| 欧美精品成人一区二区视频一| 久久中文电影| 日韩中文精品亚洲第三区| 国产精品无码久久久久久| 久久这里只有精品66| 亚洲最大综合网| 国产在线拍偷自揄观看视频网站| 免费观看欧美性一级| 亚洲最大在线观看| 国产美女在线免费观看| 伊人色婷婷| 久久香蕉欧美精品| 久久国产毛片| 伊人网址在线| 亚洲无码A视频在线| 国语少妇高潮| 欧美成人综合在线| 久久永久视频| 在线观看亚洲人成网站| 国产午夜小视频| 日韩在线成年视频人网站观看| 久久99久久无码毛片一区二区| 四虎精品国产AV二区| 麻豆精品在线视频| 亚洲视频在线青青| 91精品aⅴ无码中文字字幕蜜桃| 亚洲一级毛片免费看| 尤物在线观看乱码| 色丁丁毛片在线观看| 国产成人一区在线播放| 色网站在线视频| 国产福利不卡视频| 亚洲人成色77777在线观看| 91精品免费久久久| 91精品久久久久久无码人妻| 国产人成乱码视频免费观看| 国产成人一区免费观看| 丁香五月亚洲综合在线| 久久国产V一级毛多内射| 精品精品国产高清A毛片| 国产区福利小视频在线观看尤物| 国产h视频在线观看视频| 日韩区欧美国产区在线观看| 国产免费福利网站| 成人av手机在线观看| 最新午夜男女福利片视频| 国产永久无码观看在线| 欧美综合激情| 91福利片| 亚洲国产天堂在线观看| 国产aⅴ无码专区亚洲av综合网| 国产办公室秘书无码精品| 精品久久久久久中文字幕女| 伊人查蕉在线观看国产精品| 伊人久久精品无码麻豆精品| 九九久久精品免费观看| 精品伊人久久久香线蕉| 2019国产在线| 国产欧美视频在线观看| 国产在线精品人成导航| 91欧美在线| 一本一道波多野结衣一区二区 | 亚洲AⅤ综合在线欧美一区| 精品欧美一区二区三区在线| 欧美激情,国产精品| 青青操视频在线| 久久黄色小视频| 99久久精品美女高潮喷水| 欧美在线视频a| 欧美亚洲国产一区| 亚洲高清在线天堂精品| 秘书高跟黑色丝袜国产91在线| 国产极品美女在线| 欧美国产综合色视频| 精品国产美女福到在线直播| 色婷婷久久| 国产精品jizz在线观看软件|