本篇文章給大家談?wù)勡浖_發(fā)的三種模式,以及軟件開發(fā)的模式有幾種?它們的優(yōu)缺點(diǎn)各是什么?對(duì)應(yīng)的知識(shí)點(diǎn),希望對(duì)各位有所幫助,不要忘了收藏本站喔。
本文目錄一覽:
- 1、軟件開發(fā)模式有哪些?
- 2、軟件的開發(fā)模式有哪些?
- 3、軟件設(shè)計(jì)模式主要有哪幾種
軟件開發(fā)模式有哪些?
. 邊做邊改模型(Build-and-Fix Model)
好吧,其實(shí)現(xiàn)在許多產(chǎn)品實(shí)際都是使用的“邊做邊改”模型來開發(fā)的,特別是很多小公司產(chǎn)品周期壓縮的太短。在這種模型中,既沒有規(guī)格說明,也沒有經(jīng)過設(shè)計(jì),軟件隨著客戶的需要一次又一次地不斷被修改。
在這個(gè)模型中,開發(fā)人員拿到項(xiàng)目立即根據(jù)需求編寫程序,調(diào)試通過后生成軟件的第一個(gè)版本。在提供給用戶使用后,如果程序出現(xiàn)錯(cuò)誤,或者用戶提出新的要求,開發(fā)人員重新修改代碼,直到用戶和測(cè)試等等滿意為止。
這是一種類似作坊的開發(fā)方式,邊做邊改模型的優(yōu)點(diǎn)毫無疑問就是前期出成效快。
對(duì)編寫邏輯不需要太嚴(yán)謹(jǐn)?shù)男〕绦騺碚f還可以對(duì)付得過去,但這種方法對(duì)任何規(guī)模的開發(fā)來說都是不能令人滿意的,其主要問題在于:
缺少規(guī)劃和設(shè)計(jì)環(huán)節(jié),軟件的結(jié)構(gòu)隨著不斷的修改越來越糟,導(dǎo)致無法繼續(xù)修改;
忽略需求環(huán)節(jié),給軟件開發(fā)帶來很大的風(fēng)險(xiǎn);
沒有考慮測(cè)試和程序的可維護(hù)性,也沒有任何文檔,軟件的維護(hù)十分困難。
2. 瀑布模型(Waterfall Model)
瀑布模型是一種比較老舊的軟件開發(fā)模型,1970年溫斯頓·羅伊斯提出了著名的“瀑布模型”,直到80年代都還是一直被廣泛采用的模型。
瀑布模型將軟件生命周期劃分為制定計(jì)劃、需求分析、軟件設(shè)計(jì)、程序編寫、軟件測(cè)試和運(yùn)行維護(hù)等六個(gè)基本活動(dòng),并且規(guī)定了它們自上而下、相互銜接的固定次序,如同瀑布流水,逐級(jí)下落。
在瀑布模型中,軟件開發(fā)的各項(xiàng)活動(dòng)嚴(yán)格按照線性方式進(jìn)行,當(dāng)前活動(dòng)接受上一項(xiàng)活動(dòng)的工作結(jié)果,實(shí)施完成所需的工作內(nèi)容。當(dāng)前活動(dòng)的工作結(jié)果需要進(jìn)行驗(yàn)證,如驗(yàn)證通過,則該結(jié)果作為下一項(xiàng)活動(dòng)的輸入,繼續(xù)進(jìn)行下一項(xiàng)活動(dòng),否則返回修改。
瀑布模型優(yōu)點(diǎn)是嚴(yán)格遵循預(yù)先計(jì)劃的步驟順序進(jìn)行,一切按部就班比較嚴(yán)謹(jǐn)。
瀑布模型強(qiáng)調(diào)文檔的作用,并要求每個(gè)階段都要仔細(xì)驗(yàn)證。但是,這種模型的線性過程太理想化,已不再適合現(xiàn)代的軟件開發(fā)模式,幾乎被業(yè)界拋棄,其主要問題在于:
各個(gè)階段的劃分完全固定,階段之間產(chǎn)生大量的文檔,極大地增加了工作量;
由于開發(fā)模型是線性的,用戶只有等到整個(gè)過程的末期才能見到開發(fā)成果,從而增加了開發(fā)的風(fēng)險(xiǎn);
早期的錯(cuò)誤可能要等到開發(fā)后期的測(cè)試階段才能發(fā)現(xiàn),進(jìn)而帶來嚴(yán)重的后果。
各個(gè)軟件生命周期銜接花費(fèi)時(shí)間較長,團(tuán)隊(duì)人員交流成本大。
瀑布式方法在需求不明并且在項(xiàng)目進(jìn)行過程中可能變化的情況下基本是不可行的。
3. 迭代模型(stagewise model)
迭代模型(也被稱作迭代增量式開發(fā)或迭代進(jìn)化式開發(fā))是一種與傳統(tǒng)的瀑布式開發(fā)相反的軟件開發(fā)過程,它彌補(bǔ)了傳統(tǒng)開發(fā)方式中的一些弱點(diǎn),具有更高的成功率和生產(chǎn)率。
在迭代式開發(fā)方法中,整個(gè)開發(fā)工作被組織為一系列的短小的、固定長度(如3周)的小項(xiàng)目,被稱為一系列的迭代。每一次迭代都包括了需求分析、設(shè)計(jì)、實(shí)現(xiàn)與測(cè)試。采用這種方法,開發(fā)工作可以在需求被完整地確定之前啟動(dòng),并在一次迭代中完成系統(tǒng)的一部分功能或業(yè)務(wù)邏輯的開發(fā)工作。再通過客戶的反饋來細(xì)化需求,并開始新一輪的迭代。
教學(xué)中,對(duì)迭代和版本的區(qū)別,可理解如下: 迭代一般指某版本的生產(chǎn)過程,包括從需求分析到測(cè)試完成; 版本一般指某階段軟件開發(fā)的結(jié)果,一個(gè)可交付使用的產(chǎn)品。
與傳統(tǒng)的瀑布模型相比較,迭代過程具有以下優(yōu)點(diǎn):
降低了在一個(gè)增量上的開支風(fēng)險(xiǎn)。如果開發(fā)人員重復(fù)某個(gè)迭代,那么損失只是這一個(gè)開發(fā)有誤的迭代的花費(fèi)。
降低了產(chǎn)品無法按照既定進(jìn)度進(jìn)入市場的風(fēng)險(xiǎn)。通過在開發(fā)早期就確定風(fēng)險(xiǎn),可以盡早來解決而不至于在開發(fā)后期匆匆忙忙。
加快了整個(gè)開發(fā)工作的進(jìn)度。因?yàn)殚_發(fā)人員清楚問題的焦點(diǎn)所在,他們的工作會(huì)更有效率。
由于用戶的需求并不能在一開始就作出完全的界定,它們通常是在后續(xù)階段中不斷細(xì)化的。因此,迭代過程這種模式使適應(yīng)需求的變化會(huì)更容易些。因此復(fù)用性更高
4. 快速原型模型(Rapid Prototype Model)
快速原型模型的第一步是建造一個(gè)快速原型,實(shí)現(xiàn)客戶或未來的用戶與系統(tǒng)的交互,用戶或客戶對(duì)原型進(jìn)行評(píng)價(jià),進(jìn)一步細(xì)化待開發(fā)軟件的需求。通過逐步調(diào)整原型使其滿足客戶的要求,開發(fā)人員可以確定客戶的真正需求是什么;第二步則在第一步的基礎(chǔ)上開發(fā)客戶滿意的軟件產(chǎn)品。
顯然,快速原型方法可以克服瀑布模型的缺點(diǎn),減少由于軟件需求不明確帶來的開發(fā)風(fēng)險(xiǎn),具有顯著的效果。
快速原型的關(guān)鍵在于盡可能快速地建造出軟件原型,一旦確定了客戶的真正需求,所建造的原型將被丟棄。因此,原型系統(tǒng)的內(nèi)部結(jié)構(gòu)并不重要,重要的是必須迅速建立原型,隨之迅速修改原型,以反映客戶的需求。
快速原型模型有點(diǎn)整合“邊做邊改”與“瀑布模型”優(yōu)點(diǎn)的意味。
5、增量模型(Incremental Model)
與建造大廈相同,軟件也是一步一步建造起來的。在增量模型中,軟件被作為一系列的增量構(gòu)件來設(shè)計(jì)、實(shí)現(xiàn)、集成和測(cè)試,每一個(gè)構(gòu)件是由多種相互作用的模塊所形成的提供特定功能的代碼片段構(gòu)成。
增量模型在各個(gè)階段并不交付一個(gè)可運(yùn)行的完整產(chǎn)品,而是交付滿足客戶需求的一個(gè)子集的可運(yùn)行產(chǎn)品。整個(gè)產(chǎn)品被分解成若干個(gè)構(gòu)件,開發(fā)人員逐個(gè)構(gòu)件地交付產(chǎn)品,這樣做的好處是軟件開發(fā)可以較好地適應(yīng)變化,客戶可以不斷地看到所開發(fā)的軟件,從而降低開發(fā)風(fēng)險(xiǎn)。但是,增量模型也存在以下缺陷:
由于各個(gè)構(gòu)件是逐漸并入已有的軟件體系結(jié)構(gòu)中的,所以加入構(gòu)件必須不破壞已構(gòu)造好的系統(tǒng)部分,這需要軟件具備開放式的體系結(jié)構(gòu)。
在開發(fā)過程中,需求的變化是不可避免的。增量模型的靈活性可以使其適應(yīng)這種變化的能力大大優(yōu)于瀑布模型和快速原型模型,但也很容易退化為邊做邊改模型,從而是軟件過程的控制失去整體性。
在使用增量模型時(shí),第一個(gè)增量往往是實(shí)現(xiàn)基本需求的核心產(chǎn)品。核心產(chǎn)品交付用戶使用后,經(jīng)過評(píng)價(jià)形成下一個(gè)增量的開發(fā)計(jì)劃,它包括對(duì)核心產(chǎn)品的修改和一些新功能的發(fā)布。這個(gè)過程在每個(gè)增量發(fā)布后不斷重復(fù),直到產(chǎn)生最終的完善產(chǎn)品。
例如,使用增量模型開發(fā)字處理軟件。可以考慮,第一個(gè)增量發(fā)布基本的文件管理、編輯和文檔生成功能,第二個(gè)增量發(fā)布更加完善的編輯和文檔生成功能,第三個(gè)增量實(shí)現(xiàn)拼寫和文法檢查功能,第四個(gè)增量完成高級(jí)的頁面布局功能。
6. 螺旋模型(Spiral Model)
1988年,巴利·玻姆(Barry Boehm)正式發(fā)表了軟件系統(tǒng)開發(fā)的“螺旋模型”,它將瀑布模型和快速原型模型結(jié)合起來,強(qiáng)調(diào)了其他模型所忽視的風(fēng)險(xiǎn)分析,特別適合于大型復(fù)雜的系統(tǒng)。
螺旋模型沿著螺線進(jìn)行若干次迭代,圖中的四個(gè)象限代表了以下活動(dòng):
制定計(jì)劃:確定軟件目標(biāo),選定實(shí)施方案,弄清項(xiàng)目開發(fā)的限制條件;
風(fēng)險(xiǎn)分析:分析評(píng)估所選方案,考慮如何識(shí)別和消除風(fēng)險(xiǎn);
實(shí)施工程:實(shí)施軟件開發(fā)和驗(yàn)證;
客戶評(píng)估:評(píng)價(jià)開發(fā)工作,提出修正建議,制定下一步計(jì)劃。
螺旋模型由風(fēng)險(xiǎn)驅(qū)動(dòng),強(qiáng)調(diào)可選方案和約束條件從而支持軟件的重用,有助于將軟件質(zhì)量作為特殊目標(biāo)融入產(chǎn)品開發(fā)之中。但是,螺旋模型也有一定的限制條件,具體如下:
螺旋模型強(qiáng)調(diào)風(fēng)險(xiǎn)分析,但要求許多客戶接受和相信這種分析,并做出相關(guān)反應(yīng)是不容易的,因此,這種模型往往適應(yīng)于內(nèi)部的大規(guī)模軟件開發(fā)。
如果執(zhí)行風(fēng)險(xiǎn)分析將大大影響項(xiàng)目的利潤,那么進(jìn)行風(fēng)險(xiǎn)分析毫無意義,因此,螺旋模型只適合于大規(guī)模軟件項(xiàng)目。
軟件開發(fā)人員應(yīng)該擅長尋找可能的風(fēng)險(xiǎn),準(zhǔn)確地分析風(fēng)險(xiǎn),否則將會(huì)帶來更大的風(fēng)險(xiǎn)
一個(gè)階段首先是確定該階段的目標(biāo),完成這些目標(biāo)的選擇方案及其約束條件,然后從風(fēng)險(xiǎn)角度分析方案的開發(fā)策略,努力排除各種潛在的風(fēng)險(xiǎn),有時(shí)需要通過建造原型來完成。如果某些風(fēng)險(xiǎn)不能排除,該方案立即終止,否則啟動(dòng)下一個(gè)開發(fā)步驟。最后,評(píng)價(jià)該階段的結(jié)果,并設(shè)計(jì)下一個(gè)階段。
7. 敏捷軟件開發(fā) (Agile development)
敏捷開發(fā)是一種以人為核心、迭代、循序漸進(jìn)的開發(fā)方法。在敏捷開發(fā)中,軟件項(xiàng)目的構(gòu)建被切分成多個(gè)子項(xiàng)目,各個(gè)子項(xiàng)目的成果都經(jīng)過測(cè)試,具備集成和可運(yùn)行的特征。換言之,就是把一個(gè)大項(xiàng)目分為多個(gè)相互聯(lián)系,但也可獨(dú)立運(yùn)行的小項(xiàng)目,并分別完成,在此過程中軟件一直處于可使用狀態(tài)。
敏捷開發(fā)小組主要的工作方式可以歸納為:作為一個(gè)整體工作; 按短迭代周期工作; 每次迭代交付一些成果,關(guān)注業(yè)務(wù)優(yōu)先級(jí),檢查與調(diào)整。
敏捷軟件開發(fā)要注意項(xiàng)目規(guī)模,規(guī)模增長,團(tuán)隊(duì)交流成本就上去了,因此敏捷軟件開發(fā)暫時(shí)適合不是特別大的團(tuán)隊(duì)開發(fā),比較適合一個(gè)組的團(tuán)隊(duì)使用。
8. 演化模型(evolutionary model)
主要針對(duì)事先不能完整定義需求的軟件開發(fā)。用戶可以給出待開發(fā)系統(tǒng)的核心需求,并且當(dāng)看到核心需求實(shí)現(xiàn)后,能夠有效地提出反饋,以支持系統(tǒng)的最終設(shè)計(jì)和實(shí)現(xiàn)。軟件開發(fā)人員根據(jù)用戶的需求,首先開發(fā)核心系統(tǒng)。當(dāng)該核心系統(tǒng)投入運(yùn)行后,用戶試用之,完成他們的工作,并提出精化系統(tǒng)、增強(qiáng)系統(tǒng)能力的需求。軟件開發(fā)人員根據(jù)用戶的反饋,實(shí)施開發(fā)的迭代過程。第一迭代過程均由需求、設(shè)計(jì)、編碼、測(cè)試、集成等階段組成,為整個(gè)系統(tǒng)增加一個(gè)可定義的、可管理的子集。
在開發(fā)模式上采取分批循環(huán)開發(fā)的辦法,每循環(huán)開發(fā)一部分的功能,它們成為這個(gè)產(chǎn)品的原型的新增功能。于是,設(shè)計(jì)就不斷地演化出新的系統(tǒng)。 實(shí)際上,這個(gè)模型可看作是重復(fù)執(zhí)行的多個(gè)“瀑布模型”。
“演化模型”要求開發(fā)人員有能力把項(xiàng)目的產(chǎn)品需求分解為不同組,以便分批循環(huán)開發(fā)。這種分組并不是絕對(duì)隨意性的,而是要根據(jù)功能的重要性及對(duì)總體設(shè)計(jì)的基礎(chǔ)結(jié)構(gòu)的影響而作出判斷。有經(jīng)驗(yàn)指出,每個(gè)開發(fā)循環(huán)以六周到八周為適當(dāng)?shù)拈L度。
9. 噴泉模型(fountain model, (面向?qū)ο蟮纳嫫谀P? 面向?qū)ο螅∣bject Oriented,OO)模型))
噴泉模型與傳統(tǒng)的結(jié)構(gòu)化生存期比較,具有更多的增量和迭代性質(zhì),生存期的各個(gè)階段可以相互重疊和多次反復(fù),而且在項(xiàng)目的整個(gè)生存期中還可以嵌入子生存期。就像水噴上去又可以落下來,可以落在中間,也可以落在最底部。
10. 智能模型(四代技術(shù)(4GL))
智能模型擁有一組工具(如數(shù)據(jù)查詢、報(bào)表生成、數(shù)據(jù)處理、屏幕定義、代碼生成、高層圖形功能及電子表格等),每個(gè)工具都能使開發(fā)人員在高層次上定義軟件的某些特性,并把開發(fā)人員定義的這些軟件自動(dòng)地生成為源代碼。這種方法需要四代語言(4GL)的支持。4GL不同于三代語言,其主要特征是用戶界面極端友好,即使沒有受過訓(xùn)練的非專業(yè)程序員,也能用它編寫程序;它是一種聲明式、交互式和非過程性編程語言。4GL還具有高效的程序代碼、智能缺省假設(shè)、完備的數(shù)據(jù)庫和應(yīng)用程序生成器。目前市場上流行的4GL(如Foxpro等)都不同程度地具有上述特征。但4GL目前主要限于事務(wù)信息系統(tǒng)的中、小型應(yīng)用程序的開發(fā)。
11. 混合模型(hybrid model)
過程開發(fā)模型又叫混合模型(hybrid model),或元模型(meta-model),把幾種不同模型組合成一種混合模型,它允許一個(gè)項(xiàng)目能沿著最有效的路徑發(fā)展,這就是過程開發(fā)模型(或混合模型)。實(shí)際上,一些軟件開發(fā)單位都是使用幾種不同的開發(fā)方法組成他們自己的混合模型。
軟件的開發(fā)模式有哪些?
1.瀑布模型 : 1970年溫斯頓·羅伊斯(Winston Royce)提出了著名的“瀑布模型”,直到80年代早期,它一直是唯一被廣泛采用的軟件開發(fā)模型。
2.迭代模型 : 在某種程度上,開發(fā)迭代是一次完整地經(jīng)過所有工作流程的過程:需求、分析設(shè)計(jì)、實(shí)施和測(cè)試工作流程。實(shí)質(zhì)上,它類似小型的瀑布式項(xiàng)目。RUP認(rèn)為,所有的階段都可以細(xì)分為迭代。每一次的迭代都會(huì)產(chǎn)生一個(gè)可以發(fā)布的產(chǎn)品,這個(gè)產(chǎn)品是最終產(chǎn)品的一個(gè)子集。
3.敏捷開發(fā)模型 : 是一種從1990年代開始逐漸引起廣泛關(guān)注的一些新型軟件開發(fā)方法,是一種應(yīng)對(duì)快速變化的需求的一種軟件開發(fā)能力。相對(duì)于“非敏捷”,更強(qiáng)調(diào)程序員團(tuán)隊(duì)與業(yè)務(wù)專家之間的緊密協(xié)作、面對(duì)面的溝通(認(rèn)為比書面的文檔更有效)、頻繁交付新的軟件版本。能夠很好地適應(yīng)需求變化的代碼編寫和團(tuán)隊(duì)組織方法,也更注重軟件開發(fā)中人的作用。敏捷建模(Agile Modeling,AM)的價(jià)值觀包括了XP的四個(gè)價(jià)值觀:溝通、簡單、反饋、勇氣,此外,還擴(kuò)展了第五個(gè)價(jià)值觀:謙遜。
4.螺旋模型:螺旋模型是一種演化軟件開發(fā)過程模型,它兼顧了快速原型的迭代的特征以及瀑布模型的系統(tǒng)化與嚴(yán)格監(jiān)控。螺旋模型最大的特點(diǎn)在于引入了其他模型不具備的風(fēng)險(xiǎn)分析,使軟件在無法排除重大風(fēng)險(xiǎn)時(shí)有機(jī)會(huì)停止,以減小損失。同時(shí),在每個(gè)迭代階段構(gòu)建原型是螺旋模型用以減小風(fēng)險(xiǎn)的途徑。螺旋模型更適合大型的昂貴的系統(tǒng)級(jí)的軟件應(yīng)用。
5.快速原型模型:快速原型模型需要迅速建造一個(gè)可以運(yùn)行的軟件原型 ,以便理解和澄清問題,使開發(fā)人員與用戶達(dá)成共識(shí),最終在確定的客戶需求基礎(chǔ)上開發(fā)客戶滿意的軟件產(chǎn)品。 快速原型模型允許在需求分析階段對(duì)軟件的需求進(jìn)行初步而非完全的分析和定義,快速設(shè)計(jì)開發(fā)出軟件系統(tǒng)的原型,該原型向用戶展示待開發(fā)軟件的全部或部分功能和性能;用戶對(duì)該原型進(jìn)行測(cè)試評(píng)定,給出具體改進(jìn)意見以豐富細(xì)化軟件需求;開發(fā)人員據(jù)此對(duì)軟件進(jìn)行修改完善,直至用戶滿意認(rèn)可之后,進(jìn)行軟件的完整實(shí)現(xiàn)及測(cè)試、維護(hù)。
軟件設(shè)計(jì)模式主要有哪幾種
軟件設(shè)計(jì)模式主要有以下三大類共23種:
一、創(chuàng)建型模式:
1、工廠方法模式工廠方法模式的創(chuàng)建是因?yàn)楹唵喂S模式有一個(gè)問題,在簡單工廠模式中類的創(chuàng)建依賴工廠類,如果想要拓展程序,必須對(duì)工廠類進(jìn)行修改,這違背了開閉原則,所以就出現(xiàn)了工廠方法模式,只需要?jiǎng)?chuàng)建一個(gè)工廠接口和多個(gè)工廠實(shí)現(xiàn)類。
2、抽象工廠模式抽象工廠模式是提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無需指定它們具體的類。區(qū)別于工廠方法模式的地方,工廠方法模式是創(chuàng)建一個(gè)工廠,可以實(shí)現(xiàn)多種對(duì)象;而抽象工廠模式是提供一個(gè)抽象工廠接口,里面定義多種工廠,每個(gè)工廠可以生產(chǎn)多種對(duì)象。
3、單例模式單例模式能保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn),同時(shí)在類內(nèi)部創(chuàng)造單一對(duì)象,通過設(shè)置權(quán)限,使類外部無法再創(chuàng)造對(duì)象。單例對(duì)象能保證在一個(gè)JVM中,該對(duì)象只有一個(gè)實(shí)例存在。
4、建造者模式建造者模式是將一個(gè)復(fù)雜的構(gòu)建與其表示相分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。在程序當(dāng)中就是將一些不會(huì)變的基本組件,通過builder來進(jìn)行組合,構(gòu)建復(fù)雜對(duì)象,實(shí)現(xiàn)分離。
5、原型模式:原型模式是用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過拷貝這些原型創(chuàng)建新的對(duì)象。其實(shí)就是將對(duì)象復(fù)制了一份并返還給調(diào)用者,對(duì)象需繼承Cloneable并重寫clone方法。原型模式的思想就是將一個(gè)對(duì)象作為原型,對(duì)其進(jìn)行復(fù)制、克隆,產(chǎn)生一個(gè)和原對(duì)象類似的新對(duì)象。
二、結(jié)構(gòu)型模式:
1、適配器模式適配器模式是使得原本由于接口不兼容而不能一起工作的那些類可以一起工作,銜接兩個(gè)不兼容、獨(dú)立的接口的功能,使得它們能夠一起工作,適配器起到中介的作用。
2、裝飾模式:裝飾器模式是動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé),給一個(gè)對(duì)象增加一些新的功能,要求裝飾對(duì)象和被裝飾對(duì)象實(shí)現(xiàn)同一個(gè)接口,裝飾對(duì)象持有被裝飾對(duì)象的實(shí)例。除了動(dòng)態(tài)的增加,也可以動(dòng)態(tài)的撤銷,要做到動(dòng)態(tài)的形式,不可以用繼承實(shí)現(xiàn),因?yàn)槔^承是靜態(tài)的。
3、代理模式代理模式是為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問,也就是創(chuàng)建類的代理類,間接訪問被代理類的過程中,對(duì)其功能加以控制。
4、外觀模式外觀模式是為子系統(tǒng)中的一組接口提供一個(gè)一致的界面,外觀模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。
5、橋接模式橋接模式是將抽象部分與實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立的變化。橋接模式就是把事物和其具體實(shí)現(xiàn)分開,使他們可以各自獨(dú)立的變化(突然聯(lián)想到了mvc模式)。
6、組合模式:組合模式是將對(duì)象組合成樹形結(jié)構(gòu)以表示”部分-整體”的層次結(jié)構(gòu),組合模式使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。
7、享元模式:享元模式是運(yùn)用共享技術(shù)有效地支持大量細(xì)粒度的對(duì)象。享元模式的主要目的是實(shí)現(xiàn)對(duì)象的共享,即共享池,當(dāng)系統(tǒng)中對(duì)象多的時(shí)候可以減少內(nèi)存的開銷,重用現(xiàn)有的同類對(duì)象,若未找到匹配的對(duì)象,則創(chuàng)建新對(duì)象,這樣可以減少對(duì)象的創(chuàng)建,降低系統(tǒng)內(nèi)存,提高效率。
三、行為型模式:
1、策略模式:
策略模式是定義一系列的算法,把它們一個(gè)個(gè)封裝起來, 并且使它們可相互替換,且算法的變化不會(huì)影響到使用算法的客戶。
2、模版方法模式:
模板方法模式是定義一個(gè)操作中的算法的骨架,而將一些步驟延遲到子類中。該模式就是在一個(gè)抽象類中,有一個(gè)主方法,再定義1…n個(gè)方法,可以是抽象的,也可以是實(shí)際的方法,定義一個(gè)類,繼承該抽象類,重寫抽象方法,通過調(diào)用抽象類,實(shí)現(xiàn)對(duì)子類的調(diào)用。
模板方法使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟,將一些固定步驟、固定邏輯的方法封裝成模板方法。調(diào)用模板方法即可完成那些特定的步驟。
3、觀察者模式:
觀察者模式是定義對(duì)象間的一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知并被自動(dòng)更新。
也就是當(dāng)被觀察者狀態(tài)變化時(shí),通知所有觀察者,這種依賴方式具有雙向性,在QQ郵箱中的郵件訂閱和RSS訂閱,當(dāng)用戶瀏覽一些博客時(shí),經(jīng)常會(huì)看到RSS圖標(biāo),簡單來說就是當(dāng)訂閱了該文章,如果后續(xù)有更新,會(huì)及時(shí)通知用戶。這種現(xiàn)象即是典型的觀察者模式。
4、迭代器模式:
迭代器模式是提供一種方法順序訪問一個(gè)聚合對(duì)象中各個(gè)元素, 而又無須暴露該對(duì)象的內(nèi)部表示。
在Java當(dāng)中,將聚合類中遍歷各個(gè)元素的行為分離出來,封裝成迭代器,讓迭代器來處理遍歷的任務(wù);使簡化聚合類,同時(shí)又不暴露聚合類的內(nèi)部,在我們經(jīng)常使用的JDK中各個(gè)類也都是這些基本的東西。
5、責(zé)任鏈模式:
責(zé)任鏈模式是避免請(qǐng)求發(fā)送者與接收者耦合在一起,讓多個(gè)對(duì)象都有可能接收請(qǐng)求,將這些對(duì)象連接成一條鏈,并且沿著這條鏈傳遞請(qǐng)求,直到有對(duì)象處理它為止。有多個(gè)對(duì)象,每個(gè)對(duì)象持有對(duì)下一個(gè)對(duì)象的引用,這樣就會(huì)形成一條鏈,請(qǐng)求在這條鏈上傳遞,直到某一對(duì)象決定處理該請(qǐng)求。
6、命令模式:
命令模式是將一個(gè)請(qǐng)求封裝成一個(gè)對(duì)象,從而使發(fā)出者可以用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化。模式當(dāng)中存在調(diào)用者、接收者、命令三個(gè)對(duì)象,實(shí)現(xiàn)請(qǐng)求和執(zhí)行分開;調(diào)用者選擇命令發(fā)布,命令指定接收者。
7、備忘錄模式:
備忘錄模式是在不破壞封裝性的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài)。創(chuàng)建一個(gè)備忘錄類,用來存儲(chǔ)原始類的信息;同時(shí)創(chuàng)建備忘錄倉庫類,用來存儲(chǔ)備忘錄類,主要目的是保存一個(gè)對(duì)象的某個(gè)狀態(tài),以便在適當(dāng)?shù)臅r(shí)候恢復(fù)對(duì)象,也就是做個(gè)備份。
8、狀態(tài)模式:
狀態(tài)模式是允許對(duì)象在內(nèi)部狀態(tài)發(fā)生改變時(shí)改變它的行為。對(duì)象具有多種狀態(tài),且每種狀態(tài)具有特定的行為。
9、訪問者模式:
訪問者模式主要是將數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)操作分離。在被訪問的類里面加一個(gè)對(duì)外提供接待訪問者的接口,訪問者封裝了對(duì)被訪問者結(jié)構(gòu)的一些雜亂操作,解耦結(jié)構(gòu)與算法,同時(shí)具有優(yōu)秀的擴(kuò)展性。通俗來講就是一種分離對(duì)象數(shù)據(jù)結(jié)構(gòu)與行為的方法。
10、中介者模式:
中介者模式是用一個(gè)中介對(duì)象來封裝一系列的對(duì)象交互,中介者使各對(duì)象不需要顯式地相互引用,從而使其耦合松散,而且可以獨(dú)立地改變它們之間的交互。
11、解釋器模式:
解釋器模式是給定一個(gè)語言,定義它的文法表示,并定義一個(gè)解釋器,這個(gè)解釋器使用該標(biāo)識(shí)來解釋語言中的句子,基本也就用在這個(gè)范圍內(nèi),適用面較窄,例如:正則表達(dá)式的解釋等。
擴(kuò)展資料:
軟件設(shè)計(jì)的概念以及意義:
軟件設(shè)計(jì)模式是對(duì)軟件設(shè)計(jì)經(jīng)驗(yàn)的總結(jié),是對(duì)軟件設(shè)計(jì)中反復(fù)出現(xiàn)的設(shè)計(jì)問題的成功解決方案的描述。為了記錄這些成功的設(shè)計(jì)經(jīng)驗(yàn)并方便以后使用,軟件設(shè)計(jì)模式通常包含 4 個(gè)基本要素:模式名稱、問題、解決方案以及效果。
模式名稱實(shí)際上就是一個(gè)幫助記憶的名稱,是用于軟件設(shè)計(jì)的技術(shù)術(shù)語,有助于設(shè)計(jì)者之間的交流。
問題描述了設(shè)計(jì)者所面臨的設(shè)計(jì)場景,用于告訴設(shè)計(jì)者在什么情況下使用該模式。
解決方案描述了設(shè)計(jì)的細(xì)節(jié),通常會(huì)給出方案的原理圖示(例如 UML 的類圖,序列圖等,也可能是一些示意圖)及相關(guān)文字說明,如果可能,還會(huì)給出一些代碼實(shí)例,以便對(duì)解決方案的深入理解。
效果描述了設(shè)計(jì)方案的優(yōu)勢(shì)和劣勢(shì),這些效果通常面向軟件的質(zhì)量屬性,例如,可擴(kuò)展性、可復(fù)用性等。
軟件設(shè)計(jì)模式的重要意義在于設(shè)計(jì)復(fù)用。設(shè)計(jì)模式可以使設(shè)計(jì)者更加方便地借鑒或直接使用已經(jīng)過證實(shí)的成功設(shè)計(jì)方案,而不必花費(fèi)時(shí)間進(jìn)行重復(fù)設(shè)計(jì)。一些設(shè)計(jì)模式甚至提供了顯示的類圖設(shè)計(jì)及代碼實(shí)例,為設(shè)計(jì)的文檔化及軟件的開發(fā)提供了直接的支持。
軟件開發(fā)的三種模式的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于軟件開發(fā)的模式有幾種?它們的優(yōu)缺點(diǎn)各是什么?、軟件開發(fā)的三種模式的信息別忘了在本站進(jìn)行查找喔。