軟件設(shè)計(jì)與體系結(jié)構(gòu)課后題答案_第1頁(yè)
軟件設(shè)計(jì)與體系結(jié)構(gòu)課后題答案_第2頁(yè)
軟件設(shè)計(jì)與體系結(jié)構(gòu)課后題答案_第3頁(yè)
軟件設(shè)計(jì)與體系結(jié)構(gòu)課后題答案_第4頁(yè)
軟件設(shè)計(jì)與體系結(jié)構(gòu)課后題答案_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、【題型】1.選擇20道2.填空10道3.簡(jiǎn)答5或6道4.編程題2道【重點(diǎn)】1.軟件危機(jī)的表現(xiàn) 黃色底紋的是重點(diǎn)的一級(jí)標(biāo)題,下同軟件開(kāi)發(fā)進(jìn)度難以預(yù)測(cè)軟件開(kāi)發(fā)成本難以控制用戶對(duì)產(chǎn)品功能難以滿足軟件產(chǎn)品質(zhì)量無(wú)法保證軟件產(chǎn)品難以維護(hù)2.引發(fā)軟件危機(jī)的原因用戶需求不明確缺乏正確的理論指導(dǎo)軟件開(kāi)發(fā)規(guī)模越來(lái)越大軟件開(kāi)發(fā)復(fù)雜度越來(lái)越高3.體系結(jié)構(gòu)概念構(gòu)件、構(gòu)件之間的關(guān)系、集成構(gòu)件的模式及約束條件4.構(gòu)件的概念構(gòu)件是指語(yǔ)義完整、語(yǔ)法正確和有可重用價(jià)值的單位軟件,是軟件重用過(guò)程中可以明確辨識(shí)的系統(tǒng);結(jié)構(gòu)上,它是語(yǔ)義描述、通訊接口和實(shí)現(xiàn)代碼的復(fù)合體。5.引入體系結(jié)構(gòu)使得開(kāi)發(fā)過(guò)程發(fā)生什么變化?好處是什么?軟件再工程、

2、逆工程的概念?軟件設(shè)計(jì)質(zhì)量的量度【變化】在引入了體系結(jié)構(gòu)的軟件開(kāi)發(fā)之后,應(yīng)用系統(tǒng)的構(gòu)造過(guò)程變?yōu)椤皢?wèn)題定義軟件需求軟件體系結(jié)構(gòu)軟件設(shè)計(jì)軟件實(shí)現(xiàn)”,可以認(rèn)為軟件體系結(jié)構(gòu)架起了軟件需求與軟件設(shè)計(jì)之間的一座橋梁。 【好處】克服軟件危機(jī)【再工程】是指對(duì)既存對(duì)象系統(tǒng)進(jìn)行調(diào)查,并將其重構(gòu)為新形式代碼的開(kāi)發(fā)過(guò)程。最大限度的復(fù)用既存系統(tǒng)的各種資源是再工程的最重點(diǎn)特征之一。 如何開(kāi)發(fā)可復(fù)用軟件和如何構(gòu)造采用可復(fù)用軟件的系統(tǒng)體系結(jié)構(gòu)是兩個(gè)關(guān)鍵問(wèn)題?!灸婀こ獭渴侵阜治鲕浖到y(tǒng),確定其構(gòu)成成分及各成分間的關(guān)系,提取并生成系統(tǒng)抽象和設(shè)計(jì)信息的工程。【量度】面向?qū)ο筌浖|(zhì)量的度量重點(diǎn)在于對(duì)類的分析上。應(yīng)從類的以下方面考慮:

3、 耦合 內(nèi)聚度 繼承性 復(fù)雜度6.5個(gè)設(shè)計(jì)原則概念【單一職責(zé)原則】就一個(gè)類而言,應(yīng)該僅有一個(gè)引起它變化的原因?!鹃_(kāi)閉原則】軟件實(shí)體(類、模塊、函數(shù)等等)應(yīng)該可以擴(kuò)展,但是不可修改。(也就是老婆常說(shuō)的對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉)【依賴倒轉(zhuǎn)】抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象。要針對(duì)接口編程,不要對(duì)實(shí)現(xiàn)編程。【里氏代換】在軟件里面,把父類都替換成它的子類,程序行為沒(méi)有變化。簡(jiǎn)單地說(shuō),子類型必須能夠替換掉它們的父類型?!镜厦滋亍咳绻麅蓚€(gè)類不必彼此直接通信,那么這兩個(gè)類就不應(yīng)當(dāng)發(fā)生直接的相互作用。如果其中一個(gè)類需要調(diào)用另一個(gè)類的某一個(gè)方法的話,可以通過(guò)第三者轉(zhuǎn)發(fā)這個(gè)調(diào)用。7.軟件設(shè)計(jì)目標(biāo)(健壯性等)

4、概念正確性、健壯性、可復(fù)用性、可維護(hù)性、高效性8.17個(gè)模式(包含簡(jiǎn)單工廠方法)的概念、結(jié)構(gòu)圖、類的關(guān)系、代碼、什么時(shí)候采用、優(yōu)缺點(diǎn)【簡(jiǎn)單工廠】簡(jiǎn)單工廠模式是由一個(gè)工廠類根據(jù)傳入的參數(shù),動(dòng)態(tài)決定應(yīng)該創(chuàng)建哪一個(gè)產(chǎn)品類(這些產(chǎn)品類繼承自一個(gè)父類或接口)的實(shí)例。 按住Ctrl鍵并單擊我可以查看三個(gè)工廠模式的相同點(diǎn)結(jié)構(gòu)圖: 灰色底紋的是重點(diǎn)的二級(jí)標(biāo)題,下同老師給的ppt上沒(méi)有,在度娘那里找了一個(gè)優(yōu)點(diǎn):工廠類是整個(gè)模式的關(guān)鍵.包含了必要的邏輯判斷,根據(jù)外界給定的信息,決定究竟應(yīng)該創(chuàng)建哪個(gè)具體類的對(duì)象.通過(guò)使用工廠類,外界可以從直接創(chuàng)建具體產(chǎn)品對(duì)象的尷尬局面擺脫出來(lái),僅僅需要負(fù)責(zé)“消費(fèi)”對(duì)象就可以了。而不

5、必管這些對(duì)象究竟如何創(chuàng)建及如何組織的明確了各自的職責(zé)和權(quán)利,有利于整個(gè)軟件體系結(jié)構(gòu)的優(yōu)化。缺點(diǎn):由于工廠類集中了所有實(shí)例的創(chuàng)建邏輯,違反了高內(nèi)聚責(zé)任分配原則,將全部創(chuàng)建邏輯集中到了一個(gè)工廠類中;它所能創(chuàng)建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類了。當(dāng)系統(tǒng)中的具體產(chǎn)品類不斷增多時(shí)候,可能會(huì)出現(xiàn)要求工廠類根據(jù)不同條件創(chuàng)建不同實(shí)例的需求這種對(duì)條件的判斷和對(duì)具體產(chǎn)品類型的判斷交錯(cuò)在一起,很難避免模塊功能的蔓延,對(duì)系統(tǒng)的維護(hù)和擴(kuò)展非常不利;何時(shí)采用:工廠類負(fù)責(zé)創(chuàng)建的對(duì)象比較少;客戶只知道傳入工廠類的參數(shù),對(duì)于如何創(chuàng)建對(duì)象(邏輯)不關(guān)心;由于簡(jiǎn)單工廠很容易違反高內(nèi)聚責(zé)任分配原則,因此

6、一般只在很簡(jiǎn)單的情況下應(yīng)用?!静呗阅J健克x了算法家族,分別封裝起來(lái),讓他們之間可以互相替換,此模式讓算法的變化,不會(huì)影響到使用算法的客戶結(jié)構(gòu)圖:優(yōu)點(diǎn):1.Strategy類層次為Context類定義了一系列可供重用的算法或行為。繼承有助于析取出這些算法中的公共功能。 2.簡(jiǎn)化了單元測(cè)試,因?yàn)槊總€(gè)算法都有自己的類,可以通過(guò)自己的接口單獨(dú)測(cè)試。修改其中任一個(gè)時(shí),也不會(huì)影響其他算法。3. 當(dāng)不同的行為堆砌到一個(gè)類中時(shí),就很難避免使用條件語(yǔ)句來(lái)選擇合適的行為最開(kāi)始的程序,不得不在客戶端代碼中判斷使用哪個(gè)算法。4. 將這些行為封裝在一個(gè)獨(dú)立的Strategy類中,可以在使用這些行為的類中消除條件語(yǔ)句

7、。缺點(diǎn):CashContext還是用到了switch分支語(yǔ)句,若增加算法,需更改CashContext中的代碼何時(shí)采用:策略模式就是用來(lái)封裝算法的,可以用它來(lái)封裝幾乎任何類型的規(guī)則,只要在分析過(guò)程中聽(tīng)到需要在不同時(shí)間應(yīng)用不同的業(yè)務(wù)規(guī)則,就可以考慮用使用策略模式處理這種變化的可能性?!狙b飾模式】動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé),就增加功能來(lái)說(shuō),裝飾模式比生成子類更為靈活結(jié)構(gòu)圖:優(yōu)點(diǎn):1. 把類的裝飾功能從類中搬移去除,這樣可以簡(jiǎn)化原有的類。2. 有效的將類的核心職責(zé)和裝飾功能區(qū)分開(kāi)。而且可以去除相關(guān)類中重復(fù)的裝飾邏輯。缺點(diǎn):多層的裝飾比較復(fù)雜何時(shí)采用:1. 需要擴(kuò)展一個(gè)類的功能,或給一個(gè)類增加

8、附加功能2. 需要?jiǎng)討B(tài)地給一個(gè)對(duì)象增加功能,這些功能可以再動(dòng)態(tài)地撤銷3. 需要為一批的兄弟類進(jìn)行改裝或加裝功能【工廠方法】定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類。 按住Ctrl鍵并單擊我可以查看三個(gè)工廠模式的相同點(diǎn)結(jié)構(gòu)圖:優(yōu)點(diǎn):1工廠方法克服了簡(jiǎn)單工廠違背開(kāi)閉原則的缺點(diǎn),又保持了封裝對(duì)象創(chuàng)建過(guò)程的優(yōu)點(diǎn)。2.使得更換對(duì)象時(shí),不需要做大的改動(dòng),降低了客戶程序與產(chǎn)品對(duì)象的耦合。3.工廠方法模式是簡(jiǎn)單工廠模式的進(jìn)一步抽象和推廣。4.由于使用了多態(tài),工廠方法模式保持了簡(jiǎn)單工廠模式的優(yōu)點(diǎn),而且克服了缺點(diǎn)。缺點(diǎn):1.由于每加一個(gè)產(chǎn)品,就需要加一個(gè)產(chǎn)品工廠的類,增加了額外的工作量。2.沒(méi)有避免修

9、改客戶端的代碼。3.反射避免分支判斷問(wèn)題何時(shí)采用:工廠方法模式是new一個(gè)對(duì)象的替代品,所以在所有需要生成對(duì)象的地方都可以使用,但是需要慎重地考慮是否要增加一個(gè)工廠類進(jìn)行管理,增加代碼的復(fù)雜度。其次,需要靈活的、可擴(kuò)展的框架時(shí),可以考慮用工廠方法模式?!驹湍J健恐付▌?chuàng)建對(duì)象的種類,并且通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象。原型模式其實(shí)就是從一個(gè)對(duì)象再創(chuàng)建另外一個(gè)可定制的對(duì)象,而且不需要知道任何創(chuàng)建的細(xì)節(jié)。結(jié)構(gòu)圖:優(yōu)點(diǎn):1 性能優(yōu)良:原型模型是在內(nèi)存二進(jìn)制流的拷貝,要比直接new一個(gè)對(duì)象性能好很多,特別是要在一個(gè)循環(huán)體內(nèi)產(chǎn)生大量的對(duì)象時(shí),原型模型可以更好地體現(xiàn)其優(yōu)點(diǎn)。2 逃避構(gòu)造函數(shù)的約束:這既是它的

10、優(yōu)點(diǎn)也是缺點(diǎn),直接在內(nèi)存中拷貝,構(gòu)造函數(shù)是不會(huì)執(zhí)行的,優(yōu)點(diǎn)就是減少了約束,缺點(diǎn)也是減少了約束,需要大家在實(shí)際應(yīng)用時(shí)考慮。何時(shí)采用:1 資源優(yōu)化場(chǎng)景:類初始化需要消化非常多的資源,這個(gè)資源包括數(shù)據(jù)、硬件資源等。2 性能和安全要求的場(chǎng)景:通過(guò)new產(chǎn)生一個(gè)對(duì)象需要非常頻繁的數(shù)據(jù)準(zhǔn)備或訪問(wèn)權(quán)限,則可以使用原型模式。3 一個(gè)對(duì)象多個(gè)修改者的場(chǎng)景:一個(gè)對(duì)象需要提供給其他對(duì)象訪問(wèn),而且各個(gè)調(diào)用者可能都需要修改其值時(shí),可以考慮使用【模版方法】定義一個(gè)操作中的算法骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟結(jié)構(gòu)圖:優(yōu)點(diǎn):1.模板方法模式是通過(guò)把不變行為

11、搬移到超類,去除子類中的重復(fù)代碼。2.模板方法模式提供了一個(gè)很好的代碼復(fù)用平臺(tái)。遇到由一系列步驟構(gòu)成的過(guò)程,這些過(guò)程從高層次上看是相同的,但有些步驟的實(shí)現(xiàn)不同,考慮用模板方法模式。3. 當(dāng)不變和可變的行為在方法的子類實(shí)現(xiàn)中混合在一起的時(shí)候,不變的行為就會(huì)在子類中重復(fù)出現(xiàn)。通過(guò)模板方法模式把這些行為搬移到單一的地方,這樣就幫助子類擺脫重復(fù)的不變行為的糾纏。缺點(diǎn):按照我們的設(shè)計(jì)習(xí)慣,抽象類負(fù)責(zé)聲明最抽象、最一般的事物屬性和方法,實(shí)現(xiàn)類完成具體的事物屬性和方法。但是模版方法模式卻顛倒了,抽象類定義了部分抽象方法,由子類實(shí)現(xiàn),子類執(zhí)行的結(jié)果影響了父類的結(jié)果,也就是子類對(duì)父類產(chǎn)生了影響,這在復(fù)雜的項(xiàng)目中

12、,會(huì)帶來(lái)代碼閱讀的難度,而且也會(huì)讓新手產(chǎn)生不適感。何時(shí)采用:1 多個(gè)子類有公有的方法,并且邏輯基本相同時(shí)。2 重要、復(fù)雜的算法,可以把核心算法設(shè)計(jì)為模版方法,周邊的相關(guān)細(xì)節(jié)功能則由各個(gè)子類實(shí)現(xiàn)【外觀模式】為子系統(tǒng)中的一組接口提供一個(gè)一致的界面,此模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。 按住Ctrl鍵并單擊我可以查看代理模式、外觀模式、適配器模式的相同點(diǎn)結(jié)構(gòu)圖:優(yōu)點(diǎn):1. 減少系統(tǒng)的相互依賴2. 提高了靈活性3. 提高安全性缺點(diǎn):不符合開(kāi)閉原則何時(shí)采用:1.在設(shè)計(jì)初期階段,應(yīng)該要有意識(shí)的將不同的兩個(gè)層分離,層與層之間建立外觀類(Facade),這樣就可以為復(fù)雜的子系統(tǒng)提供一

13、個(gè)簡(jiǎn)單的接口,使得耦合大大降低。2.在開(kāi)發(fā)階段,子系統(tǒng)往往因?yàn)椴粩嗟闹貥?gòu)演化而變的越來(lái)越復(fù)雜,給外部調(diào)用它們的用戶帶來(lái)困難。增加外觀類可以提供一個(gè)簡(jiǎn)單的接口,減少它們之間的依賴。3. 在維護(hù)一個(gè)遺留的大型系統(tǒng)時(shí),可能這個(gè)系統(tǒng)已經(jīng)非常難以維護(hù)和擴(kuò)展了,但新的需求開(kāi)發(fā)必須依賴它。為新系統(tǒng)開(kāi)發(fā)一個(gè)外觀類,來(lái)提供設(shè)計(jì)粗糙或高度復(fù)雜的遺留代碼的比較清晰的簡(jiǎn)單接口,讓新系統(tǒng)和Facade對(duì)象交互,F(xiàn)acade與遺留代碼交互所有復(fù)雜的工作?!窘ㄔ煺摺繉⒁粋€(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)造過(guò)程可以創(chuàng)建不同的表示。結(jié)構(gòu)圖:優(yōu)點(diǎn):使得建造代碼與表示代碼分離,由于建造者隱藏了該產(chǎn)品是如何組裝的,所以若需

14、要改變一個(gè)產(chǎn)品的內(nèi)部表示,只需要再定義一個(gè)具體的建造者就可以了。何時(shí)采用:主要用于創(chuàng)建一個(gè)復(fù)雜的對(duì)象,這些對(duì)象內(nèi)部構(gòu)建間的構(gòu)造順序通常是穩(wěn)定的,但對(duì)象內(nèi)部的構(gòu)建通常面臨著復(fù)雜的變化?!居^察者】 定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽(tīng)某一個(gè)主題對(duì)象。這個(gè)主題對(duì)象在狀態(tài)發(fā)生變化時(shí),會(huì)通知所有觀察者對(duì)象,使它們能夠自動(dòng)更新自己結(jié)構(gòu)圖:優(yōu)點(diǎn):將一個(gè)系統(tǒng)分割成一系列相互協(xié)作的類有一個(gè)很不好的副作用,那就是需要維護(hù)相關(guān)對(duì)象間的一致性。我們不希望為了維持一致性而使各類緊密耦合,這樣會(huì)給維護(hù)、擴(kuò)展和重用都帶來(lái)不便。缺點(diǎn):開(kāi)發(fā)效率和運(yùn)行效率不高何時(shí)采用:1個(gè)對(duì)象的改變需要同時(shí)改變其他對(duì)象的時(shí)候。而

15、且它不知道具體有多少對(duì)象有待改變時(shí),應(yīng)該考慮使用觀察者模式。2.抽象模型有兩個(gè)方面,其中一方面依賴另一方面,這時(shí)用觀察者模式可以將這兩者封裝在獨(dú)立的對(duì)象中使它們各自獨(dú)立的改變和復(fù)用?!境橄蠊S】提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口,而無(wú)需指定它們具體的類。 按住Ctrl鍵并單擊我可以查看三個(gè)工廠模式的相同點(diǎn)結(jié)構(gòu)圖:優(yōu)點(diǎn):1交換產(chǎn)品系列,由于具體工廠類,在一個(gè)應(yīng)用中只需要初始化的時(shí)候出現(xiàn)一次,這就使得改變一個(gè)應(yīng)用的具體工廠變得非常容易,它只需要改變具體工廠即可使用不同的產(chǎn)品配置。2.體的創(chuàng)建實(shí)例過(guò)程與客戶端分離,客戶端是通過(guò)它們的抽象接口操縱實(shí)例,產(chǎn)品的具體名也被具體工廠的實(shí)現(xiàn)分離,不會(huì)出

16、現(xiàn)在客戶代碼中。缺點(diǎn):1.加功能增加一個(gè)項(xiàng)目表Project2.三個(gè)類IProject、SqlserverProject、AccessProject3.三個(gè)類IFactory、SqlserverFactory、AccessFactory(增加創(chuàng)建方法)4.端程序類類似這樣的類,即需要調(diào)用數(shù)據(jù)庫(kù)訪問(wèn)的類,不會(huì)僅有一個(gè),有很多地方都在使用IUser或是IDepartment。5.用到數(shù)據(jù)庫(kù)訪問(wèn)的時(shí)候,都要聲明IFactory factory=new SqlserverFactory(),若有100個(gè)調(diào)用數(shù)據(jù)庫(kù)訪問(wèn)的類,需要修改100次。6.大批量的改動(dòng)。何時(shí)采用:一個(gè)對(duì)象群都有相同的約束,則可以采

17、用抽象工廠模式【狀態(tài)模式】當(dāng)一個(gè)對(duì)象的內(nèi)在狀態(tài)改變時(shí)允許改變其行為,這個(gè)對(duì)象看起來(lái)像改變了其類。結(jié)構(gòu)圖:優(yōu)點(diǎn):將與特定狀態(tài)相關(guān)的行為局部化,并且將不同狀態(tài)的行為分割開(kāi)來(lái)。即將特定狀態(tài)的相關(guān)行為都放入一個(gè)對(duì)象中(ConcreteState),由于所有與狀態(tài)相關(guān)的代碼都存放在某個(gè)ConcreteState中,所以通過(guò)定義新的子類可以很容易地增加新的狀態(tài)和轉(zhuǎn)換。消除龐大的條件分支。狀態(tài)模式通過(guò)把各種狀態(tài)轉(zhuǎn)移邏輯分布到State的子類之間,來(lái)減少相互間的依賴。缺點(diǎn):子類太多何時(shí)采用:1.個(gè)對(duì)象的行為取決于它的狀態(tài),并且它必須在運(yùn)行時(shí)刻根據(jù)狀態(tài)改變它的行為時(shí)。2.某項(xiàng)業(yè)務(wù)有多個(gè)狀態(tài),通常都是一些枚舉常量

18、,狀態(tài)的變化都是依靠大量的多分支判斷語(yǔ)句來(lái)實(shí)現(xiàn),此時(shí)應(yīng)該考慮將每一種狀態(tài)定義為State的子類。這樣這些對(duì)象就可以不依賴于其他對(duì)象而獨(dú)立變化,也可以很好的面對(duì)需求的改變?!具m配器模式】將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。 按住Ctrl鍵并單擊我可以查看代理模式、外觀模式、適配器模式的相同點(diǎn)結(jié)構(gòu)圖:優(yōu)點(diǎn):1. 適配器模式可以讓兩個(gè)沒(méi)有任何關(guān)系的類在一起運(yùn)行,只要適配器這個(gè)角色能夠搞定他們就行。2. 增加了類的透明性3. 提高了類的復(fù)用度4. 靈活性非常好:某一天,突然不想要適配器,沒(méi)問(wèn)題,刪除掉就ok,其他的代碼

19、不用修改。何時(shí)采用:1.一個(gè)已經(jīng)存在的類,但若它的接口,也就是它的方法和你的要求不相同時(shí),就應(yīng)該使用適配器模式2.類所做的事情相同或相似,但是具有不同的接口時(shí)要使用它3.代碼可以統(tǒng)一調(diào)用同一接口,使得客戶端更簡(jiǎn)單、更直接、更緊湊。【備忘錄】在不破壞封裝性的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài)。這樣以后就可將該對(duì)象恢復(fù)到原先保存的狀態(tài)。結(jié)構(gòu)圖:何時(shí)采用:1適用于功能比較復(fù)雜的,但需要維護(hù)或記錄屬性歷史的類,或者需要保存的屬性只是眾多屬性中的一小部分時(shí),Originator可以根據(jù)保存的Memento信息還原到前一狀態(tài)。2.式也有類似的撤銷作用。若在某個(gè)系統(tǒng)中使用命令模式時(shí),

20、需要實(shí)現(xiàn)命令的撤銷功能,可以使用備忘錄模式來(lái)存儲(chǔ)可撤銷操作的狀態(tài)。3. 有時(shí)一些對(duì)象的內(nèi)部信息必須保存在對(duì)象以外的地方,但是必須要由對(duì)象自己讀取,這時(shí),使用備忘錄可以把復(fù)雜的對(duì)象內(nèi)部信息對(duì)其他的對(duì)象屏蔽起來(lái),從而恰當(dāng)?shù)谋3址庋b的邊界?!窘M合】將對(duì)象組合成樹(shù)形結(jié)構(gòu)以表示“部分整體”的層次結(jié)構(gòu)。組合模式使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性結(jié)構(gòu)圖:優(yōu)點(diǎn):1. 高層模塊調(diào)用簡(jiǎn)單2. 節(jié)點(diǎn)自由增加缺點(diǎn):違反了依賴倒轉(zhuǎn)原則何時(shí)采用:1.中體現(xiàn)部分與整體層次的結(jié)構(gòu)時(shí)。2.用戶可以忽略組合對(duì)象與單個(gè)對(duì)象的不同,統(tǒng)一地使用結(jié)構(gòu)中的所有對(duì)象時(shí)。【迭代器】提供一種方法順序訪問(wèn)一個(gè)聚合對(duì)象中各個(gè)元素,而又不暴露該對(duì)象的內(nèi)部表示。結(jié)構(gòu)圖:何時(shí)采用:平時(shí)編程的for就是迭代器模式,還有Iterable接口,其實(shí)平時(shí)我們就在用這個(gè)模式,有沒(méi)有感覺(jué)棒棒的【單例】保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。結(jié)構(gòu)圖:優(yōu)點(diǎn):1保證唯一的實(shí)例。2 . 因?yàn)镾ingleton類封裝它的唯一實(shí)例,這樣它可以嚴(yán)格地控制客戶怎樣

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論