基于軟件開發(fā)下外觀模式的改進(jìn)研究論文
外觀模式是使用頻率較高的軟件設(shè)計(jì)模式之一。針對標(biāo)準(zhǔn)外觀模式所存在的問題,本文提出了兩種外觀模式改進(jìn)方案并結(jié)合實(shí)例進(jìn)行研究。通過引入抽象外觀類,讓系統(tǒng)具有良好的可擴(kuò)展性,滿足開閉原則;通過對外觀類實(shí)施單例化,可以確保外觀對象的唯一性,節(jié)約系統(tǒng)資源。
1 引言
設(shè)計(jì)模式在軟件開發(fā)中應(yīng)用日益廣泛,它們是前人經(jīng)驗(yàn)的總結(jié)與積累,每一種模式均是在多個(gè)軟件項(xiàng)目中被反復(fù)使用、被多數(shù)人知曉,且經(jīng)過規(guī)范的分類編目和整理的面向?qū)ο笤O(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。
外觀模式是使用頻率較高的軟件設(shè)計(jì)模式之一,在軟件開發(fā)中應(yīng)用非常廣泛。根據(jù)單一職責(zé)原則,將一個(gè)大的軟件模塊(或子系統(tǒng))進(jìn)行分解可以降低整個(gè)系統(tǒng)的復(fù)雜性,提高單個(gè)模塊(或子系統(tǒng))的'獨(dú)立性和可復(fù)用性。通過引入外觀角色,可以降低客戶類與子系統(tǒng)類之間的耦合度,使之相互依賴關(guān)系降至最小,從而降低原有系統(tǒng)的復(fù)雜度。在沒有外觀角色的系統(tǒng)中,客戶類需要與多個(gè)子系統(tǒng)類進(jìn)行交互,系統(tǒng)耦合度較高;在引入外觀角色之后,客戶類只需要與外觀類交互,再通過外觀類間接調(diào)用子系統(tǒng)類,在外觀類中封裝了與子系統(tǒng)之間的復(fù)雜交互關(guān)系,從而降低系統(tǒng)的耦合度。
但是,在標(biāo)準(zhǔn)的外觀模式中存在兩個(gè)問題:首先,標(biāo)準(zhǔn)外觀模式?jīng)]有提供抽象層,在增加、更換或者刪除子系統(tǒng)類時(shí)需要修改客戶類或者外觀類的源代碼,違背了開閉原則;其次,外觀類維持了對多個(gè)子系統(tǒng)類的引用,在系統(tǒng)運(yùn)行時(shí),外觀對象勢必會占用較多的系統(tǒng)資源,需要對外觀對象的數(shù)量進(jìn)行限制。
2 外觀模式的改進(jìn)方案
針對標(biāo)準(zhǔn)外觀模式存在的問題和缺陷,本文提出了相應(yīng)的改進(jìn)方案,包括引入抽象外觀類以及對外觀類實(shí)施單例化。
2.1 抽象外觀類的引入
為了讓外觀模式能夠符合開閉原則,引入抽象外觀類來對外觀模式進(jìn)行抽象化改進(jìn)?蛻舳酸槍Τ橄笸庥^類進(jìn)行編程,將所有的具體外觀類作為抽象外觀類的子類,如果需要更改業(yè)務(wù)需求,無須修改原有外觀類,只需要增加一個(gè)新的具體外觀類即可,由新的外觀類來關(guān)聯(lián)新的業(yè)務(wù)需求。通過使用配置文件,可以達(dá)到不修改任何源代碼即可置換外觀類的目的,如圖1所示。
2.2 外觀類的單例化
在大多數(shù)情況下,為了節(jié)約系統(tǒng)資源,程序在運(yùn)行時(shí)只需創(chuàng)建某個(gè)外觀類的唯一實(shí)例。因此,可以將外觀模式與單例模式聯(lián)用,對外觀類實(shí)施單例化,確保系統(tǒng)中只存在唯一一個(gè)外觀對象并提供唯一的訪問入口,可以降低系統(tǒng)資源的消耗。單例化后的外觀類的結(jié)構(gòu)如圖2所示。
在圖2中,外觀類Facade被設(shè)計(jì)為單例類,在其中定義了一個(gè)靜態(tài)的Facade類型的成員變量instance,其構(gòu)造函數(shù)為私有的(private),并通過一個(gè)靜態(tài)的公有工廠方法getInstance()返回自己的唯一實(shí)例。
3 實(shí)例研究
下面通過一個(gè)實(shí)例來說明如何在實(shí)際項(xiàng)目中使用改進(jìn)后的外觀模式。
在某使用外觀模式的文件加密模塊的初始設(shè)計(jì)方案中,F(xiàn)ileReader類用于讀取待加密的源文件、FileWriter類用于保存加密之后的文件、Cipher類用于實(shí)現(xiàn)數(shù)據(jù)的加密,EncryptFacade是一個(gè)加密外觀類,它通過調(diào)用三個(gè)業(yè)務(wù)類中的方法實(shí)現(xiàn)文件讀取、加密和保存的完整流程。
3.1 抽象化改進(jìn)
如果需要將原系統(tǒng)中的加密類Cipher改為NewCipher,勢必會導(dǎo)致外觀類EncryptFacade源代碼發(fā)生修改,違背開閉原則。通過引入抽象外觀類,重構(gòu)后的系統(tǒng)設(shè)計(jì)方案如圖3所示,在圖3中使用了基于衍型的模式標(biāo)注方法SBPN (Stereotype Based Pattern Notation)來對結(jié)構(gòu)圖中的設(shè)計(jì)模式信息進(jìn)行標(biāo)注。
在圖3中,客戶類Client針對抽象外觀類AbstractEncryptFacade進(jìn)行編程,可將具體外觀類類名存儲在XML等格式的配置文件中,更換具體外觀類時(shí)只需修改配置文件,無須修改源代碼,符合開閉原則。
3.2 單例化改進(jìn)
為了節(jié)省系統(tǒng)資源,可以將EncryptFacade設(shè)計(jì)為單例類,改進(jìn)之后的結(jié)構(gòu)如圖4所示。
通過對外觀類實(shí)施單例化,可以確保系統(tǒng)中有且僅有一個(gè)EncryptFacade類的實(shí)例,避免生成多個(gè)EncryptFacade對象,節(jié)約系統(tǒng)資源。
4 結(jié)束語
外觀模式是一種使用頻率非常高的設(shè)計(jì)模式,在軟件開發(fā)中應(yīng)用廣泛。針對標(biāo)準(zhǔn)外觀模式存在的不足,本文提出了兩種外觀模式的改進(jìn)方案:第一種方案通過引入抽象外觀類,使得系統(tǒng)在增加、刪除或者更換子系統(tǒng)類時(shí)無須修改已有類的源代碼,可以對抽象外觀類進(jìn)行擴(kuò)展來適應(yīng)設(shè)計(jì)方案的改變,讓系統(tǒng)滿足開閉原則;第二種方案通過對外觀類單例化,將外觀模式與單例模式聯(lián)用,確保在系統(tǒng)中只存在外觀類的唯一實(shí)例,節(jié)約系統(tǒng)資源。通過上述改進(jìn),可以提高外觀模式的適用性和有效性。
【基于軟件開發(fā)下外觀模式的改進(jìn)研究論文】相關(guān)文章:
基于土工實(shí)驗(yàn)教學(xué)模式的研究論文01-27
基于網(wǎng)絡(luò)包裝技術(shù)下軟件開發(fā)的遠(yuǎn)程監(jiān)控系統(tǒng)研究論文10-31
基于Android平臺軟件開發(fā)技術(shù)研究論文11-07
基于Maven的輕量級Java軟件開發(fā)研究論文11-02
基于CMMI的軟件開發(fā)模型應(yīng)用研究論文11-04