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

泛型化的策略模式設(shè)計(jì)

2013-04-12 00:00:00朱仙芝
現(xiàn)代電子技術(shù) 2013年17期

摘 要: 按照GoF的“為變化進(jìn)行設(shè)計(jì)”的原則,以匹配度算法的選擇問題為實(shí)例,將泛型編程技術(shù)應(yīng)用于策略模式設(shè)計(jì)中。首先通過對(duì)低層設(shè)計(jì)的重構(gòu),從諸多匹配度算法中抽取共有的部分,將其泛化為簡(jiǎn)單的函數(shù)對(duì)象,并用這些函數(shù)對(duì)象作為策略模式中的具體策略;再利用泛型技術(shù)構(gòu)建抽象策略和上下文引用關(guān)系。這樣的設(shè)計(jì)很好地解決了策略模式設(shè)計(jì)中的代碼重用和泛化問題。

關(guān)鍵詞: 策略模式; 重構(gòu); 泛型程序設(shè)計(jì); 匹配度算法

中圖分類號(hào): TN711?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2013)17?0159?04

0 引 言

面向?qū)ο笠呀?jīng)成為軟件設(shè)計(jì)與開發(fā)的主流技術(shù),它有很多優(yōu)點(diǎn),同時(shí)也有自身難以克服的內(nèi)在弱點(diǎn)。例如,直接用類(Class)作為問題域中的基本抽象和程序設(shè)計(jì)單位,將概念映射成對(duì)象類的方法在本質(zhì)上是非常受限和不足的,這種抽象方法常常導(dǎo)致過于約束的系統(tǒng)設(shè)計(jì)和代碼實(shí)現(xiàn),并且在實(shí)際應(yīng)用中缺乏通用性和運(yùn)行效率[1]。許多基于OOP的通用數(shù)據(jù)結(jié)構(gòu)和算法庫(kù)的設(shè)計(jì)及實(shí)現(xiàn)都帶有諸多缺陷和不足,適應(yīng)不了用戶遇到的各式各樣的數(shù)據(jù)類型(尤其是原始類型和導(dǎo)出類型),并且效率難以提高。

設(shè)計(jì)模式是面向?qū)ο箢I(lǐng)域?yàn)閷?shí)現(xiàn)高級(jí)代碼復(fù)用而總結(jié)出來的各種方案,設(shè)計(jì)模式的目標(biāo)是使對(duì)在特定環(huán)境中良好工作的設(shè)計(jì)能在相似的環(huán)境中被再一次應(yīng)用。然而,設(shè)計(jì)模式同樣無法擺脫面向?qū)ο蠊逃械念B疾[2]。

重構(gòu)是一種保持行為的轉(zhuǎn)換。重構(gòu)過程包括去除重復(fù)、簡(jiǎn)化復(fù)雜邏輯和澄清模糊代碼。重構(gòu)的目的是使設(shè)計(jì)模式的實(shí)現(xiàn)更具有靈活性、有效性和可維護(hù)性。設(shè)計(jì)模式是目的,重構(gòu)則是手段;設(shè)計(jì)模式是重構(gòu)的結(jié)果,并為重構(gòu)提供了目標(biāo)[3]。然而,重構(gòu)改進(jìn)設(shè)計(jì)模式的技術(shù)在設(shè)計(jì)模式泛化方面仍然存在問題[4]。

正是針對(duì)上述不足,泛型程序設(shè)計(jì)(Generic Programming,GP)應(yīng)運(yùn)而生。GP是一種以需求為中心的程序設(shè)計(jì)范式,作為面向?qū)ο蟪绦蛟O(shè)計(jì)技術(shù)的補(bǔ)充和擴(kuò)展,能夠克服先前程序設(shè)計(jì)中的所有主要困難,實(shí)現(xiàn)真正的通用和高效的數(shù)據(jù)結(jié)構(gòu)和算法庫(kù)[5?6]。然而,國(guó)內(nèi)目前對(duì)泛型程序設(shè)計(jì)的研究和應(yīng)用主要是通過一些泛型程序庫(kù)(Standard Template Library,STL)的譯著來引進(jìn)和介紹泛型程序設(shè)計(jì)的基本思想和方法[2]。

本文的研究目的是探討如何將設(shè)計(jì)模式、重構(gòu)技術(shù)、泛型程序設(shè)計(jì)技術(shù)等有機(jī)地結(jié)合起來,使設(shè)計(jì)模式更加泛化。在本文的實(shí)踐中將策略模式、函數(shù)作為對(duì)象和泛型程序設(shè)計(jì)及重構(gòu)的思想結(jié)合起來,以模糊識(shí)別系統(tǒng)中的多種匹配度算法的選擇為實(shí)例,做到了為變化進(jìn)行模式設(shè)計(jì)的目的。通過對(duì)低層設(shè)計(jì)的轉(zhuǎn)換,利用重構(gòu)改進(jìn)策略模式,利用Java SE5提出的泛型方法設(shè)計(jì)策略模式,使策略模式更加泛化。實(shí)現(xiàn)在運(yùn)行時(shí)根據(jù)客戶要求,動(dòng)態(tài)組合生成匹配度算法。不但使算法的選擇和算法的實(shí)現(xiàn)相分離,去除了大量的重復(fù)代碼,澄清了代碼的意圖,而且也容易增加新的算法,獲得了更好的靈活性。

1 將匹配度算法重構(gòu)為策略模式

在設(shè)計(jì)一個(gè)模糊識(shí)別系統(tǒng)時(shí),通常有多種匹配度算法供選擇。例如:貼近度算法、語義距離算法(如:海明距離、歐幾里德距離、切比雪夫距離、明可夫斯基距離)和相似度算法(如:最大最小法、算術(shù)平均法、幾何平均法、指數(shù)法、相關(guān)系數(shù)法)等。當(dāng)客戶發(fā)出需要某種算法的請(qǐng)求時(shí),系統(tǒng)可以根據(jù)客戶發(fā)出的請(qǐng)求或被處理的數(shù)據(jù)對(duì)算法做出選擇。解決這個(gè)問題的設(shè)計(jì)模式可以使用圖1所示的策略模式[7?8]。在圖1中的每一個(gè)具體策略(Concrete Strategy)就是一個(gè)對(duì)象類的方法。然而,就匹配度問題而言,可以看到,如果直接使用策略模式,則封裝了相關(guān)算法的每一個(gè)具體策略角色中將出現(xiàn)大量重復(fù)代碼,使系統(tǒng)非常臃腫。

為了降低對(duì)系統(tǒng)的整體影響,減少子系統(tǒng)之間的相互依賴關(guān)系,使得復(fù)用更加靈活,GoF為變化進(jìn)行設(shè)計(jì)的原則[8]中有:“針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程”;“優(yōu)先使用對(duì)象組合,而不是類繼承”;“考慮設(shè)計(jì)中哪些是可變的,進(jìn)行封裝”。使用這種設(shè)計(jì)原則不但可以減少重復(fù)代碼,而且在處理新的需要時(shí),不會(huì)使設(shè)計(jì)和實(shí)現(xiàn)的開銷嚴(yán)重增大。從而實(shí)現(xiàn)強(qiáng)內(nèi)聚,松耦合設(shè)計(jì)目的。

2 匹配度算法的泛型策略模式設(shè)計(jì)

策略模式屬于對(duì)象的行為模式,其用意是針對(duì)一組算法,將每一個(gè)算法封裝到具有共同接口的獨(dú)立的類中,從而使得它們可以相互替換,算法的增加不會(huì)改變未增加算法前的客戶端的調(diào)用代碼。策略模式設(shè)計(jì)包括定義抽象策略角色、環(huán)境角色和具體策略角色三個(gè)步驟。非泛型的策略模式的設(shè)計(jì)的主要問題是對(duì)封裝的算法進(jìn)行限制,使得抽象策略角色、環(huán)境角色的通用性、靈活性和擴(kuò)展性都比較差。為解決這些不足,可將策略模式改進(jìn)為泛型策略模式。選擇匹配度算法的泛型策略模式設(shè)計(jì)如下:

2.1 定義具體策略角色

2.2 定義具有泛型的抽象策略角色

2.3 定義具有泛型的環(huán)境角色

環(huán)境角色(Context)通過泛型抽象策略角色接口來調(diào)用具體策略類。Context通過類型為Strategy的引用使用特定的Concrete Strategy。設(shè)計(jì)Context角色是組合對(duì)象,針對(duì)接口編程的過程,是整個(gè)設(shè)計(jì)的核心。Context作為上下文類,如圖1所示,對(duì)上與客戶端交互,對(duì)下與Strategy交互。當(dāng)客戶端選擇一個(gè)Concrete Strategy類的對(duì)象后,則把它傳遞給Context類的對(duì)象,然后,Context類的對(duì)象把客戶端的請(qǐng)求轉(zhuǎn)發(fā)給Strategy。

3 應(yīng)用舉例

4 結(jié) 論

本文采用泛型策略模式解決匹配度算法的選擇問題,其特點(diǎn)是將設(shè)計(jì)模式、重構(gòu)技術(shù)、泛型技術(shù)及為變化進(jìn)行模式設(shè)計(jì)的技術(shù)相結(jié)合,用函數(shù)對(duì)象作為具體策略,對(duì)設(shè)計(jì)中的可變對(duì)象進(jìn)行封裝,再利用重構(gòu)思想改進(jìn)具體策略。用泛型技術(shù)使抽象策略角色的設(shè)計(jì)和環(huán)境角色的設(shè)計(jì)更加泛化。在環(huán)境角色的設(shè)計(jì)中,通過組合對(duì)象、針對(duì)接口編程和使用泛型的編程方法,實(shí)現(xiàn)了算法的選擇和算法的實(shí)現(xiàn)相分離。通過兩個(gè)循環(huán)設(shè)計(jì)不但解決了任意選用函數(shù)對(duì)象的問題,而且解決了泛型集合的運(yùn)算問題。該設(shè)計(jì)消除了選擇所需要的匹配算法的條件語句,可以很方便地動(dòng)態(tài)改變算法或行為。該設(shè)計(jì)結(jié)構(gòu)清晰,代碼簡(jiǎn)單,重復(fù)代碼少,通用性、靈活性好,泛化強(qiáng)度高,具有更好的應(yīng)用價(jià)值。

泛型策略模式的缺點(diǎn)是策略模式造成很多的具體策略類;客戶端必須知道所有的具體策略類,并自行決定使用哪一個(gè)具體策略類。這就意味著客戶端必須理解這些算法的區(qū)別,以便適時(shí)選擇恰當(dāng)?shù)乃惴ā?/p>

參考文獻(xiàn)

[1] 孫斌.面向?qū)ο蟆⒎盒统绦蛟O(shè)計(jì)與類型約束檢查[J].計(jì)算機(jī)學(xué)報(bào),2004,27(11):1492?1503.

[2] 陳葉旺,余金山.泛型編程與設(shè)計(jì)模式[J].計(jì)算機(jī)科學(xué),2006,33(4):253?257.

[3] [美]JOSHUA K.重構(gòu)與模式[M].楊光,劉基誠(chéng),譯.北京:人民郵電出版社,2007.

[4] 亞軍,于萬明.基于設(shè)計(jì)模式的重構(gòu)技術(shù)[J].計(jì)算機(jī)應(yīng)用研究,2003(12):42?47.

[5] [美]ECKEL B. Java編程思想[M].陳昊鵬,譯.北京:機(jī)械工業(yè)出版社,2007.

[6] TORGERSEN M, HANSEN C P, ERNST E, et al. Adding wildcards to the Java programming language [C]// Proceedings of the 2004 ACM Symposium on Applied Computing. New York,USA: ACM, 2004: 1289?1296.

[7] 楊年華,張禮平.Java類庫(kù)中的策略模式[J].計(jì)算機(jī)應(yīng)用與軟件,2004,21(1):128?130.

[8] GAMMA E, HELM R, JOHNSON R, et al. Design patterns: elements of reusable object?oriented software [M]. Boston: Addison?Wesley Professional, 1995.

作者簡(jiǎn)介:朱仙芝 女,1963年出生,實(shí)驗(yàn)師。主要研究方向?yàn)橛?jì)算機(jī)程序設(shè)計(jì)與應(yīng)用。

主站蜘蛛池模板: 青青草欧美| 精品国产三级在线观看| 亚洲精品777| 国产精品美人久久久久久AV| 亚洲一区无码在线| 精品亚洲国产成人AV| 国产精品va| 手机在线国产精品| 国模视频一区二区| 国产亚洲精品精品精品| 91精品国产麻豆国产自产在线| 亚洲欧美在线精品一区二区| 99久久亚洲精品影院| 国产探花在线视频| 国产成人综合亚洲欧美在| 亚洲国产一成久久精品国产成人综合| 色偷偷男人的天堂亚洲av| 久久精品一品道久久精品| 午夜精品福利影院| 91视频99| 91区国产福利在线观看午夜| 欧美国产精品不卡在线观看| 国产亚洲欧美日韩在线观看一区二区 | 亚洲欧美精品在线| 伊人大杳蕉中文无码| 国产一级α片| 99国产精品国产| 国产综合精品日本亚洲777| 99视频在线免费| 国产91成人| 72种姿势欧美久久久大黄蕉| 九色视频线上播放| 国产白浆在线观看| 97国产在线观看| 国产区网址| 丰满人妻久久中文字幕| 国产aⅴ无码专区亚洲av综合网| 亚洲精品视频在线观看视频| 国产福利免费观看| 呦女精品网站| 91免费观看视频| 欧美高清三区| 国产00高中生在线播放| 国产亚洲美日韩AV中文字幕无码成人| 久久精品视频一| 精品福利国产| 无套av在线| 国产91在线免费视频| 国产女同自拍视频| 22sihu国产精品视频影视资讯| 99精品伊人久久久大香线蕉| 国产一区二区精品福利| 色欲色欲久久综合网| 免费观看国产小粉嫩喷水| 亚洲丝袜第一页| 日本一区中文字幕最新在线| 国产精品无码制服丝袜| 国产白浆在线观看| 国产在线精品香蕉麻豆| 亚洲精品自拍区在线观看| 亚洲成aⅴ人在线观看| 三级毛片在线播放| 人妻丰满熟妇αv无码| 精品无码专区亚洲| 免费高清自慰一区二区三区| 98超碰在线观看| 久久伊人色| 国产区成人精品视频| 亚洲精品老司机| 日韩欧美国产综合| 91精品日韩人妻无码久久| 亚洲av片在线免费观看| 欧美中文字幕在线二区| 亚洲a免费| 丁香六月激情综合| 国产电话自拍伊人| 国产精品尤物在线| 国产精品手机在线播放| 久久福利网| 成人国产免费| 91福利免费视频| 99爱在线|