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