




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、.軟件設(shè)計模式( Java 版)習(xí)題第 1 章 軟件設(shè)計模式基礎(chǔ)1.1軟件設(shè)計模式概述1.2 UML 中的類圖1.3面向?qū)ο蟮脑O(shè)計原則一、名詞解釋1. 一個軟件實體應(yīng)當(dāng)對擴(kuò)展開放,對修改關(guān)閉,即在不修改源代碼的基礎(chǔ)上擴(kuò)展一個系統(tǒng)的行為。2. 一個對象應(yīng)該只包含單一的職責(zé),并且該職責(zé)被完整地封裝在一個類中。3. 在軟件中如果能夠使用基類對象,那么一定能夠使用其子類對象。4. 是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié),使用設(shè)計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。二、單選擇題1.( A )2.( A)3.(A)4.(D)5.(D)6(A)7.( D
2、 )8.( D)9.(D )10.( E )11.( C )12(C)13.( A )三、多選擇題1(A、B、C、D)2.(A、B)3(A 、D)4(A 、B、C、D)四、填空題1依賴倒轉(zhuǎn)、迪米特法則、單一職責(zé)2模式名字、 目的、 問題、 解決方案、效果、實例代碼3超類、子類4開閉5用戶6依賴倒轉(zhuǎn)7組合 / 聚合8結(jié)構(gòu)型、 行為型9. 依賴倒轉(zhuǎn)10. 開閉11. 需求收集是否正確、體系結(jié)構(gòu)的構(gòu)建是否合理、測試是否完全12人與人之間的交流13接口14名稱、目的、 解決方案15對象組合、 類繼承.16對象組合17對象組合、 類繼承18抽象類的指針五、 簡答題1. 答:設(shè)計模式按類型分為以下三類:1
3、 )創(chuàng)建型設(shè)計模式:以靈活的方式創(chuàng)建對象集合,用于管理對象的創(chuàng)建。2 )結(jié)構(gòu)型設(shè)計模式:將己有的代碼集成到新的面向?qū)ο笤O(shè)計中,用于處理類或?qū)ο蟮慕M合。3 )行為型設(shè)計模式:用于描述對類或?qū)ο笤鯓咏换ズ驮鯓臃峙渎氊?zé)。2. 答: 設(shè)計模式的主要優(yōu)點如下:1)設(shè)計模式融合了眾多專家的經(jīng)驗,并以一種標(biāo)準(zhǔn)的形式供廣大開發(fā)人員所用,它提供了一套通用的設(shè)計詞匯和一種通用的語言以方便開發(fā)人員之間溝通和交流,使得設(shè)計方案更加通俗易懂。2)設(shè)計模式使人們可以更加簡單方便地復(fù)用成功的設(shè)計和體系結(jié)構(gòu),將已證實的技術(shù)表述成設(shè)計模式也會使新系統(tǒng)開發(fā)者更加容易理解其設(shè)計思路。設(shè)計模式使得重用成功的設(shè)計更加容易,并避免那些導(dǎo)
4、致不可重用的設(shè)計方案。3)設(shè)計模式使得設(shè)計方案更加靈活,且易于修改。4) 設(shè)計模式的使用將提高軟件系統(tǒng)的開發(fā)效率和軟件質(zhì)量,且在一定程度上節(jié)約設(shè)計成本。5)設(shè)計模式有助于初學(xué)者更深入地理解面向?qū)ο笏枷耄环矫婵梢詭椭鯇W(xué)者更加方便地閱讀和學(xué)習(xí)現(xiàn)有類庫與其他系統(tǒng)中的源代碼,另一方面還可以提高軟件的設(shè)計水平和代碼質(zhì)量。3. 答:設(shè)計模式一般有如下幾個基本要素:模式名稱、問題、目的、解決方案、效果、實例代碼和相關(guān)設(shè)計模式,其中的關(guān)鍵元素包括模式名稱、問題、解決方案和效果。4. 答:正確使用設(shè)計模式具有以下優(yōu)點: 可以提高程序員的思維能力、編程能力和設(shè)計能力。 使程序設(shè)計更加標(biāo)準(zhǔn)化、代碼編制更加工程化
5、,使軟件開發(fā)效率大大提高,從而縮短軟件的開發(fā)周期。使設(shè)計的代碼可重用性高、可讀性強(qiáng)、可靠性高、靈活性好、可維護(hù)性強(qiáng)。5.答:根據(jù)類與類之間的耦合度從弱到強(qiáng)排列, UML中的類圖有以下幾種關(guān)系:依賴關(guān)系、關(guān)聯(lián)關(guān)系、聚合關(guān)系、組合關(guān)系、泛化關(guān)系和實現(xiàn)關(guān)系。其中泛化和實現(xiàn)的耦合度相等,它們是最強(qiáng)的。.6. 答: 1)開閉原則( OCP):它要求軟件實體應(yīng)當(dāng)對擴(kuò)展開放,對修改關(guān)閉;2) 里氏替換原則( LSP):它要求繼承必須確保超類所擁有的性質(zhì)在子類中仍然成立;3)依賴倒置原則(DIP):它要求軟件設(shè)計要面向接口編程,不要面向?qū)崿F(xiàn)編程;4) 單一職責(zé)原則( SRP):它要求對象不應(yīng)該承擔(dān)太多職責(zé),一
6、個類應(yīng)該有且僅有一個引起它變化的原因;5) 接口隔離原則( ISP):它要求程序員盡量將臃腫龐大的接口拆分成更小的和更具體的接口,讓接口中只包含客戶感興趣的方法;6) 迪米特法則( LoD):它要求如果兩個軟件實體無須直接通信,就不應(yīng)當(dāng)直接相互調(diào)用,而通過第三方轉(zhuǎn)發(fā)該調(diào)用;7) 合成復(fù)用原則( CRP):它要求在軟件復(fù)用時,要盡量先使用組合或者聚合等關(guān)聯(lián)關(guān)系來實現(xiàn),其次才考慮使用繼承關(guān)系來實現(xiàn)。第 2 章 創(chuàng)建型模式(上) 2.2 單例模式2.3 原型模式一、單選擇題1.( A )2.( B )3.(A)4.(D)5.(C)6(B)7.(B)二、多選擇題1.( C )2.(A,B)3.( A、
7、B )4.(A、B、C)5. ( A、C )6( A 、B、C、D )7( A,B,C,D )三、填空題1對象的創(chuàng)建、使用分離、耦合度2創(chuàng)建型3創(chuàng)建性4懶漢式單例、 餓漢式單例5. 抽象原型類 、 具體原型類四、程序分析題 解: 本題使用了單例模式,參考類圖如下所示:.五、簡答題1. 答:創(chuàng)建型模式分為以下幾種: 單例( Singleton )模式:某個類只能生成一個實例,該類提供了一個全局訪問點供外部獲取該實例,其拓展是有限多例模式。 原型( Prototype )模式:將一個對象作為原型,通過對其進(jìn)行復(fù)制而克隆出多個和原型類似的新實例。 工廠方法( Factory Method )模式:定
8、義一個用于創(chuàng)建產(chǎn)品的接口,由子類決定生產(chǎn)什么產(chǎn)品。 抽象工廠( Abstract Factory )模式:提供一個創(chuàng)建產(chǎn)品族的接口,其每個子類可以生產(chǎn)一系列相關(guān)的產(chǎn)品。 建造者( Builder )模式:將一個復(fù)雜對象分解成多個相對簡單的部分,然后根據(jù)不同需要分別創(chuàng)建它們,最后構(gòu)建成該復(fù)雜對象。2答:單例模式重點在于在整個系統(tǒng)上共享一些創(chuàng)建時較耗資源的對象。整個應(yīng)用中只維護(hù)一個特定類實例,它被所有組件共同使用。Java.lang.Runtime是單例模式的經(jīng)典例子。從 Java 5 開始你可以使用枚舉(enum)來實現(xiàn)線程安全的單例。3. 答:單例( Singleton )模式的定義:指一個類
9、只有一個實例,且該類能自行創(chuàng)建這個實例的一種模式。特點: 1)單例類只有一個實例對象;2)該單例對象必須由單例類自行創(chuàng)建;3)單例類對外提供一個訪問該單例的全局訪問點。應(yīng)用場景: 1)在某類只要求生成一個對象的時候;2)當(dāng)對象需要被共享的場合;3)當(dāng)某類需要頻繁實例化,而創(chuàng)建的對象又頻繁被銷毀的時候。4. 答:原型模式通常適用以下場景: 1)對象之間相同或相似,即只是個別的幾個屬性不同的時候; 2)對象的創(chuàng)建過程比較麻煩,但克隆比較簡單時候。原型模式可擴(kuò)展為:帶原型管理器的原型模式,它在原型模式的基礎(chǔ)上增加了一個原型管理器 PrototypeManager 類。.第 3 章 創(chuàng)建型模式(下)
10、3.1 工廠方法模式3.2 抽象工廠模式3.3 建造者模式一、單選擇題1. (B)2.(A)3.(C)4.( C )5.(D)6.(C)7.(B)8.(A)9.(A )10.( A )二、多選擇題1( A 、B、C、D )2( A 、B、C、D )3. ( A 、C )三、填空題1工廠方法、 抽象工廠2.簡單工廠3.抽象工廠 (Abstract Factory)、 具體工廠 (Concrete Factory)、抽象產(chǎn)品(Product)4. 工廠方法、多個等級的產(chǎn)品5. 抽象建造者( Builder )、具體建造者( ConcreteBuilder )、指揮者( Director )五、簡答
11、題1答:工廠模式的最大好處是增加了創(chuàng)建對象時的封裝層次。如果你使用工廠來創(chuàng)建對象,之后你可以使用更高級和更高性能的實現(xiàn)來替換原始的產(chǎn)品實現(xiàn)或類,這不需要在調(diào)用層做任何修改。應(yīng)用場合是常常有新的對象類型要被添加進(jìn)來,但你所關(guān)心的僅僅是方法的接口 , 不關(guān)心其實現(xiàn)細(xì)節(jié),本書中已經(jīng)詳細(xì)地介紹了其好處和應(yīng)用環(huán)境。2. 答:工廠方法模式的主要優(yōu)點有:1)用戶只需要知道具體工廠的名稱就可得到所要的產(chǎn)品,無須知道產(chǎn)品的具體創(chuàng)建過程; 2)在系統(tǒng)增加新的產(chǎn)品時只需要添加具體產(chǎn)品類和對應(yīng)的具體工廠類,無需對原工廠進(jìn)行任何修改,滿足開閉原則。其缺點是:每增加一個產(chǎn)品就要增加一個具體產(chǎn)品類和一個對應(yīng)的具體工廠類,這
12、增加了系統(tǒng)的復(fù)雜度。3. 答:工廠方法模式中考慮的是一類產(chǎn)品的生廠,如:電視機(jī)工廠;而抽象工廠模式考慮多類產(chǎn)品的生產(chǎn),如:電器工廠。工廠方法模式通常適用以下場景:1)客戶只知道創(chuàng)建產(chǎn)品的工廠名, 而不知道具體的產(chǎn)品名。如: TCL 電視工廠、海信電視工廠等;2)創(chuàng)建對象的任務(wù)由多個具體子工廠中的某一個完成,而抽象工廠只提供創(chuàng)建產(chǎn)品的接口。3)客戶不關(guān)心創(chuàng)建產(chǎn)品的細(xì)節(jié),只關(guān)心產(chǎn)品的品牌。.抽象工廠模式通常適用以下場景:1 )當(dāng)需要創(chuàng)建的對象是一系列相互關(guān)聯(lián)或相互依賴的產(chǎn)品族時,如:電器工廠中的電視機(jī)、洗衣機(jī)、空調(diào)等;2)系統(tǒng)中有多個產(chǎn)品族,但每次只使用其中的某一族產(chǎn)品。如:有的粉絲只喜歡穿李寧牌
13、的衣、褲和鞋;3)系統(tǒng)中提供了產(chǎn)品的類庫,且所有產(chǎn)品的接口相同,客戶端不依賴產(chǎn)品實例的創(chuàng)建細(xì)節(jié)和內(nèi)部結(jié)構(gòu)。4. 答:產(chǎn)品的種類稱為產(chǎn)品等級,而一個具體工廠所生產(chǎn)的位于不同等級的一組產(chǎn)品稱為一個產(chǎn)品族。5. 答:建造者模式的定義 : 指將一個復(fù)雜對象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過程可以創(chuàng)建不同的表示,這樣的設(shè)計模式被稱為建造者模式。該模式的主要優(yōu)點是:1 )各個具體的建造者相互獨立的,有利于系統(tǒng)的擴(kuò)展;2)客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié),便于控制細(xì)節(jié)風(fēng)險。其缺點是: 1)產(chǎn)品的組成部分必須相同,這限制了其使用范圍;2)如果產(chǎn)品的內(nèi)部變化復(fù)雜,該模式會增加很多的建造者類。建造者模式通常在以
14、下場合使用:1 )創(chuàng)建的對象較復(fù)雜,由多個部件構(gòu)成,各部件面臨著復(fù)雜的變化,但構(gòu)件間的建造順序是穩(wěn)定的;2)創(chuàng)建復(fù)雜對象的算法獨立于該對象的組成部分以及它們的裝配方式,即產(chǎn)品的構(gòu)建過程和最終的表示是獨立的。六、編程題說明: 1-5 編程題可參考本章節(jié)的實例自己實現(xiàn)。第 4 章結(jié)構(gòu)型模式(上)4.2代理模式4.3適配器模式4.4橋接模式一、 單選擇題1.(A)2.( A )3.(D)4.(B)5.( A )6.(C)7.(D)二、 多選擇題1.( A、D )2.(A、B、D)3.( A、C、D )4.(A、B、C)三、 填空題1. 適配器( Adapter )模式 、橋接 (Bridge) 模式
15、、裝飾 (Decorator) 模式、外觀(Facade)模式、享元 (Flyweight)模式2. 真實主題( RealSubject )類 、 代理( Proxy )類3. 動態(tài)代理模式4繼承、 組合 / 聚合.5.適配者( Adaptee )類、 適配器( Adapter )類6橋接7. 適配器四、 程序分析題解: 1)本題使用了代理器模式;2)其參考 結(jié)構(gòu)圖 如下所示:五、簡答題1. 答: 代理( Proxy )模式:為某對象提供一種代理以控制對該對象的訪問。即客戶端通過代理間接地訪問該對象,從而限制、增強(qiáng)或修改該對象的一些特性。代理模式有以下的應(yīng)用場景:1)為了隱藏目標(biāo)對象存在于不同
16、地址空間的事實,方便客戶端訪問時;2)要創(chuàng)建的目標(biāo)對象開銷很大時;3)控制不同種類客戶對真實對象的訪問權(quán)限時; 4)當(dāng)調(diào)用目標(biāo)對象需要附加一些額外的處理功能時;5)為了提高系統(tǒng)的性能,需延遲對目標(biāo)的加載時。2.答:代理模式的主要優(yōu)點有:1)代理模式在客戶端與目標(biāo)對象之間起到一個中介作用和保護(hù)目標(biāo)對象的作用;2)代理對象可以擴(kuò)展目標(biāo)對象的功能;3)代理模式能將客戶端與目標(biāo)對象分離,在一定程度上降低了系統(tǒng)的耦合度。其主要缺點是:1)在客戶端和目標(biāo)對象增加一個代理對象,會造成請求處理速度變慢;2)增加了系統(tǒng)的復(fù)雜度。.3. 答:遠(yuǎn)程代理:這種方式通常是為了隱藏目標(biāo)對象存在于不同地址空間的事實,方便客
17、戶端訪問。例如用戶申請某些網(wǎng)盤空間時,會在用戶的文件系統(tǒng)中建立一個虛擬的硬盤,用戶訪問它實際訪問的是網(wǎng)盤空間。虛擬代理:這種方式通常用于要創(chuàng)建的目標(biāo)對象開銷很大時。比如下載一幅很大的圖像需要很長時間,因某種計算比較復(fù)雜而短時間無法完成,這時可以先用小比例的虛擬代理替換真實的對象,消除用戶對服務(wù)器慢的感覺。安全代理:這種方式通常用于控制不同種類客戶對真實對象的訪問權(quán)限。4. 答:適配器模式( Adapter )的定義如下 : 將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口,使得原本由于接口不兼容而不能一起工作的那些類能一起工作。適配器模式分為類結(jié)構(gòu)型模式和對象結(jié)構(gòu)型模式2 種,前者類之間的耦合度比后
18、者高,且要求程序員了解現(xiàn)有組件庫中的相關(guān)組件的內(nèi)部結(jié)構(gòu),所以應(yīng)用相對較少些。Java 例子可參考本章節(jié)相關(guān)實例設(shè)計。5.答:適配器模式通常適用以下場景:1 )以前開發(fā)的系統(tǒng)存在滿足新系統(tǒng)功能需求的類,但其接口同新系統(tǒng)的接口不一致;2)使用第三方提供的組件,但組件接口定義和自己要求的接口定義不同。應(yīng)用實例可參考本章節(jié)相關(guān)實例設(shè)計。6. 答:橋接模式的定義如下 : 將抽象與實現(xiàn)分離,使他們可以獨立的變化。它是用組合關(guān)系代替繼承關(guān)系來實現(xiàn),從而降低了抽象和實現(xiàn)這2 個可變維度的耦合度。其優(yōu)點是:1 )由于抽象與實現(xiàn)分離,所以擴(kuò)展能力強(qiáng);2)其實現(xiàn)細(xì)節(jié)對客戶透明。缺點是:由于聚合關(guān)系建立在抽象層,要求
19、開發(fā)者針對抽象化進(jìn)行設(shè)計與編程,這增加了系統(tǒng)的理解與設(shè)計難度。六、綜合題.1解: 本題可使用適配器模式和抽象工廠模式,參考類圖如下所示:其中: 1) PlayerFactory 為抽象工廠, MediaPlayerFactory 和 RealPlayerFactory 是具體工廠;2) MainWindow(主窗口)和PlayerList(播放列表)是兩個抽象產(chǎn)品;3) MediaPlayerWindow 和 RealPlayerWindow是兩個具體產(chǎn)品,是對MainWindow 的實現(xiàn);4) MediaPlayerList和 RealPlayerList是兩個具體產(chǎn)品,是對PlayerLi
20、st的實現(xiàn);5) MediaPlayerWindow 和 MediaPlayerList由 MediaPlayerFactory生產(chǎn);6) RealPlayerWindow和 RealPlayerList由 RealPlayerFactory生產(chǎn);7) MediaPlayerAPI 是已有的 API,充當(dāng)適配者,供 MediaPlayerWindow (適配器)和 MediaPlayerList (適配器)調(diào)用。8) RealPlayerAPI 也是已有的 API,充當(dāng)適配者,供 RealPlayerWindow (適配器)和 RealPlayerList (適配器)調(diào)用。.第 5 章 結(jié)構(gòu)型
21、模式(下)5.1裝飾模式5.2外觀模式5.3享元模式5.4組合模式一、單選擇題1.(D)2.(D) 3.(B)4.(C)5.( B)6(C)7.(D) 8.(A)9.(B)10.( C )二、多選擇題1( A,B,C,D )2. ( B,C)3.( A 、B )4( A 、B、C )5.( A 、B、C、D )6( A,B )7. ( C,D )三、填空題1. 抽象構(gòu)件( Component)、具體構(gòu)件( Concrete Component )、抽象裝飾( Decorator )2. 迪米特 3. 內(nèi)部狀態(tài) 、 外部狀態(tài)4. 單純 、 復(fù)合 5. 結(jié)構(gòu)型、創(chuàng)建型6. 透明式 、 安全式四、程
22、序分析題1. 解:本題使用了享元模式,參考類圖如下所示:2. 解: 1)本題使用了享元模式。2)其參考 程序代碼 如下所示:importjava.util.*;public class WareFactory. private ArrayList Wares = new ArrayList(); private int totalNum=0;public WareFactory()KitchenWare nd1=new bowl("飯碗 ");Wares.add(nd1);KitchenWare nd2=new cup("杯子 ");Wares.add(
23、nd2);public KitchenWare getKitchenWare(String type)if(type.equalsIgnoreCase("飯碗 ")totalNum+;return (KitchenWare)Wares.get(0);else if(type.equalsIgnoreCase("杯子 ")totalNum+;return (KitchenWare)Wares.get(1);else return null; public int getTotalWare() return Wares.size(); public intg
24、ettotalNum() return totalNum; public interface KitchenWare public String getType(); public void use(); public class bowl implements KitchenWare private String type;public bowl(String type) this.type=type; public StringgetType() return this.type; public void use() System.out.println("使用的廚具是:&quo
25、t; + this.type); public class cup implements KitchenWare private String type;public cup(String type) this.type=type; public String getType() return this.type; public void use() System.out.println("使用的廚具是:" +this.type); public class Client2010 public static void main(String args) KitchenWar
26、e kw1,kw2,kw3,kw4;.WareFactory df=new WareFactory();kw1=df.getKitchenWare("飯碗 "); kw1.use();kw2=df.getKitchenWare("飯碗 ");kw2.use();kw3=df.getKitchenWare("杯子 ");kw3.use();kw4=df.getKitchenWare("杯子 ");kw4.use();System.out.println("廚具種類 :" + df.getTotal
27、Ware();System.out.println("生成的廚具數(shù):" + df.gettotalNum();五、簡答題1 答:裝飾模式增加強(qiáng)了單個對象的能力。Java IO到處都使用了裝飾模式,經(jīng)典的例子就是 Buffered 系列類如 BufferedReader 和 BufferedWriter ,它們增強(qiáng)了 Reader 和 Writer 對象,以實現(xiàn)提升性能的 Buffer 層次的讀取和寫入。2. 答:裝飾模式是一種用于替代繼承的技術(shù),它使用對象之間的關(guān)聯(lián)關(guān)系來取代類之間的繼承關(guān)系。當(dāng)不能采用繼承的方式對系統(tǒng)進(jìn)行擴(kuò)展或者采用繼承不利于系統(tǒng)擴(kuò)展和維護(hù)時可以使用裝飾模
28、式。在裝飾模式中引入了裝飾類,在裝飾類中既可以調(diào)用待裝飾的原有類的方法,還可以增加新的方法,以擴(kuò)充原有類的功能。這些都不用改變原有對象,滿足開閉原則。3. 答:外觀模式的定義:是一種通過為多個復(fù)雜的子系統(tǒng)提供一個一致的接口,而使這些子系統(tǒng)更加容易被訪問的模式。其主要優(yōu)點有: 1)降低了子系統(tǒng)與客戶端之間的耦合度,使得子系統(tǒng)的變化不會影響到調(diào)用它的客戶類; 2)對客戶屏蔽了子系統(tǒng)組件,減少了客戶處理的對象數(shù)目,并使得子系統(tǒng)使用起來更加容易; 3)降低了大型軟件系統(tǒng)中的編譯依賴性,簡化了系統(tǒng)在不同平臺之間的移植過程,因為編譯一個子系統(tǒng)不會影響其他的子系統(tǒng),也不會影響到外觀對象。其主要缺點是: 1)
29、不能很好地限制客戶使用子系統(tǒng)類; 2)增加新的子系統(tǒng)可能需要修改外觀類或客戶端的源代碼,違背了“開閉原則”。其應(yīng)用場景有 : 1)對分層結(jié)構(gòu)系統(tǒng)構(gòu)建時,使用外觀模式定義子系統(tǒng)中每層的入口點可以簡化子系統(tǒng)之間的依賴關(guān)系; 2)對于一個復(fù)雜系統(tǒng),其子系統(tǒng)很多,外觀模式可以為系統(tǒng)設(shè)計一個簡單的接口供外界訪問; 3)當(dāng)客戶端與多個子系統(tǒng)之間存在很大的聯(lián)系時,引入外觀模式可將它們分離,從而提高子系統(tǒng)的獨立性和可移植性。4. 答:享元工廠角色負(fù)責(zé)創(chuàng)建和管理享元角色。當(dāng)客戶對象請求一個享元對象時,享元工廠檢查系統(tǒng)中是否存在符合要求的享元對象,如果存在則提供給客戶;如果不存在的話,則創(chuàng)建一個新的享元對象,它是
30、工廠模式在享元模式中的應(yīng)用。5. 答:組合模式包含抽象構(gòu)件( Component)角色、樹葉構(gòu)件( Leaf )角色、樹枝構(gòu)件.( Composite )角色。它分為透明式的組合模式和安全式的組合模式2 種。 安全組合模式的類圖如下:第 6 章 行為型模式(上) 6.2 模板方法模式6.3 策略模式6.4 命令模式一、 單選擇題1. (A)2.(D)3.(C)4.(B)5.(A)6.(B )7.(D)8.(A)9.(B)二、 多選擇題1. ( B,C,D)2. ( A,B,D )3. ( A,B,C )4.( A ,B, C,D )三、 填空題1. 行為型模式2. 模板方法3. 抽象方法 、具
31、體方法 、 鉤子方法4. 策略.5. 簡單工廠6. 命令四、 簡答題1. 答: 行為型模式用于描述程序在運行時復(fù)雜的流程控制,即描述多個類或?qū)ο笾g怎樣相互協(xié)作共同完成單個對象都無法單獨完成的任務(wù),它涉及到算法與對象間職責(zé)的分配。共有 11 種行為型模式,它們的定義如下: 模板方法( Template Method )模式:定義一個操作中的算法骨架,而將算法的一些步驟延遲到子類中,使得子類可以不改變該算法結(jié)構(gòu)的情況下重定義該算法的某些特定步驟。 策略( Strategy )模式:定義了一系列算法,并將每個算法封裝起來,使他們可以相互替換,且算法的改變不會影響到使用算法的客戶。 命令( Comm
32、and)模式:將一個請求封裝為一個對象,使發(fā)出請求的責(zé)任和執(zhí)行請求的責(zé)任分割開。 職責(zé)鏈( Chain of Responsibility )模式:把請求從鏈中的一個對象傳到下一個對象,直到請求被響應(yīng)為止。通過這種方式去除對象之間的耦合。狀態(tài)( State )模式:允許一個對象在其內(nèi)部狀態(tài)發(fā)生改變時改變其行為能力。 觀察者( Observer )模式:多個對象間存在一對多關(guān)系,當(dāng)一個對象發(fā)生改變時,把這種改變通知給其它多個對象,從而影響其它對象的行為。 中介者( Mediator )模式:定義一個中介對象來簡化原有對象之間的交互關(guān)系,降低系統(tǒng)中對象間的耦合度,使原有對象之間不必相互了解。 迭代
33、器( Iterator )模式:提供一種方法來順序訪問聚合對象中的一系列數(shù)據(jù),而不暴露聚合對象的內(nèi)部表示。 訪問者( Visitor )模式:在不改變集合元素的前提下,為一個集合中的每個元素提供多種訪問方式,即每個元素有多個訪問者對象訪問。 備忘錄( Memento)模式:在不破壞封裝性的前提下,獲取并保存一個對象的內(nèi)部狀態(tài),以便以后恢復(fù)它。 解釋器( Interpreter )模式:提供如何定義語言的文法,以及對語言句子的解釋方法,即解釋器。2. 答:模板方法 的主要優(yōu)點是:1) 它封裝了不變部分,擴(kuò)展可變部分。它把認(rèn)為是不變部分的算法封裝到父類中實現(xiàn),而把可變部分算法由子類繼承實現(xiàn),便于子
34、類繼續(xù)擴(kuò)展;2)它在父類中提取了公共的部分代碼,便于代碼復(fù)用;.3) 部分方法是由子類實現(xiàn)的,因此子類可以通過擴(kuò)展方式增加相應(yīng)的功能,符合開閉原則。模板方法 的主要缺點是:1 ) 對每個不同的實現(xiàn)都需要定義一個子類,這會導(dǎo)致類的個數(shù)增加,系統(tǒng)更加龐大,設(shè)計也更加抽象;2 )父類中的抽象方法由子類實現(xiàn),子類執(zhí)行的結(jié)果會影響父類的結(jié)果,這導(dǎo)致一種反向的控制結(jié)構(gòu),它提高了代碼閱讀的難度。其應(yīng)用實例有: (自己介紹)3. 答:策略模式的結(jié)構(gòu)圖如下:其應(yīng)用場景有:1)一個系統(tǒng)需要動態(tài)地在幾種算法中選擇一種時,可將每個算法封裝到策略類中;2)一個類定義了多種行為,并且這些行為在這個類的操作中以多個條件語句
35、的形式出現(xiàn),可將每個條件分支移入到它們各自的策略類中以代替這些條件語句; 3)系統(tǒng)中各算法彼此完全獨立,且要求對客戶隱藏具體算法的實現(xiàn)細(xì)節(jié)時; 4)系統(tǒng)要求使用算法的客戶不應(yīng)該知道其操作的數(shù)據(jù)時,可使用策略模式來隱藏與算法相關(guān)的數(shù)據(jù)結(jié)構(gòu);5)多個類只區(qū)別在表現(xiàn)行為不同,可以使用策略模式,在運行時動態(tài)選擇具體要執(zhí)行的行為。4.答: Java.util.List接口定義了增加(add)、刪除( remove)、修改( set )、查詢( indexOf )等策略,其實現(xiàn)類ArrayList、 LinkedList等采用了不同的算法來實現(xiàn)這些策略,用戶可根據(jù)其特點選用它們。5. 答: 命令模式通常適
36、用以下場景: 1)當(dāng)系統(tǒng)需要將請求調(diào)用者與請求接收者解耦時,命令模式使得調(diào)用者和接收者不直接交互;2)當(dāng)系統(tǒng)需要隨機(jī)請求命令或經(jīng)常增加或刪除命令時,命令模式比較方便實現(xiàn)這些功能;3)當(dāng)系統(tǒng)需要執(zhí)行一組操作時,命令模式可以定義宏命令來實現(xiàn)該功能;4)當(dāng)系統(tǒng)需要支持命令的撤銷(Undo) 操作和恢復(fù)(Redo) 操作時,可以將命令對象存儲起來,采用備忘錄模式來實現(xiàn)。其應(yīng)用實例有: (自己舉例).6. 答: 將命令模式與前面學(xué)的組合模式聯(lián)合使用,這就構(gòu)成了宏命令模式,也叫組合命令模式,其具體結(jié)構(gòu)圖如下:五、 編程題解: 1)本題使用了策略模式2)其參考 程序代碼 如下所示:interface Tra
37、velStrategypublic void travel();class AirplaneStrategy implements TravelStrategypublic void travel()System.out.println("飛機(jī)游! ");class TrainStrategy implements TravelStrategy public void travel()System.out.println("火車游! ");class BicycleStrategy implements TravelStrategy.public voi
38、dtravel()System.out.println("自行車游! "); class Person private TravelStrategyts;public setStrategy(TravelStrategy ts) this.ts=ts;public void travelMethod()Method(); class Client public static void main(String args)TravelStrategy ts = new BicycleStrategy();Person p1 = new Person();p1.
39、setStrategy(ts);P1.travelMethod();第 7 章 行為型模式(中) 7.1 職責(zé)鏈模式7.2 狀態(tài)模式7.3 觀察者模式7.4 中介者模式一、單選擇題1.( B )2.(C )3.(D)4(D)5(B)6(C)7.(D)8.( C )二、多選擇題1.( A,B,D )2. ( A,C,D )3. ( A 、B、C )4 ( A,B,D )5 ( B,C,D )三、填空題1. 對象行為型2. 純的職責(zé)鏈模式 、 不純的職責(zé)鏈模式.3. 環(huán)境( Context )、抽象狀態(tài)( State )、 具體狀態(tài)( ConcreteState )4. 觀察者、命令5.java.
40、util.Observable、java.util.Observer6. 不定義中介者接口,把具體中介者對象實現(xiàn)成為單例四、設(shè)計題1解: 本題可使用觀察者模式,參考類圖如下所示:五、簡答題1. 答:職責(zé)鏈模式的定義:為了避免請求發(fā)送者與多個請求處理者耦合在一起,將所有請求的處理者通過前一對象記住其下一個對象的引用而連成一條鏈;當(dāng)有請求發(fā)生時,可將請求沿著這條鏈傳遞,直到有對象處理它為止。2. 答:職責(zé)鏈模式是一種對象行為型模式,其主要優(yōu)點有:1 ) 降低了對象之間的耦合度。該模式使得一個對象無需知道到底是哪一個對象處理其請求以及鏈的結(jié)構(gòu),發(fā)送者和接收者也無需擁有對方的明確信息。2 ) 增強(qiáng)了系
41、統(tǒng)的可擴(kuò)展性??梢愿鶕?jù)需要增加新的請求處理類,滿足開閉原則;3 ) 增強(qiáng)了給對象指派職責(zé)的靈活性。當(dāng)工作流程發(fā)生變化,可以動態(tài)地改變鏈內(nèi)的成員或者調(diào)動它們的次序,也可動態(tài)地新增或者刪除責(zé)任。4 ) 職責(zé)鏈簡化了對象之間的連接。每個對象只需保持一個指向其后繼者的引用,不需保持其它所有處理者的引用,這避免了使用眾多的if 或者 if-else語句。5 )責(zé)任分擔(dān)。每個類只需要處理自己該處理的工作,不該處理的傳遞給下一個對象完成,明確各類的責(zé)任范圍,符合類的單一職責(zé)原則。其主要缺點是:1) 不能保證每個請求一定被處理。由于一個請求沒有明確的接收者,所以不能保證它一定會被處理,該請求可能一直傳到鏈的末
42、端都得不到處理;2) 對于比較長的職責(zé)鏈,請求的處理可能涉及到多個處理對象,系統(tǒng)性能將受到一定影響;3) 職責(zé)鏈建立的合理性要靠客戶端來保證,增加了程序的復(fù)雜性,可能會由于職責(zé)鏈的錯誤設(shè)置而導(dǎo)致系統(tǒng)出錯,如:可能會造成循環(huán)調(diào)用。.3. 答:通常在以下情況下可以考慮使用狀態(tài)模式: 1)當(dāng)一個對象的行為取決于它的狀態(tài),并且它必須在運行時刻根據(jù)狀態(tài)改變它的行為時,就可以考慮使用狀態(tài)模式;2)一個操作中含有龐大的分支結(jié)構(gòu),并且這些分支決定于對象的狀態(tài)時。在有些情況下,可能有多個環(huán)境對象需要共享一組狀態(tài),這時需要引入享元模式,將這些具體狀態(tài)對象放在集合中供程序共享,這就是共享狀態(tài)模式。4.答:觀察者模式
43、又叫做發(fā)布- 訂閱( Publish/Subscribe)模式、模型- 視圖( Model/View )模式、源 - 監(jiān)聽器( Source/Listener)模式或從屬者(Dependents )模式。5. 答:觀察者模式是基于目標(biāo)對象的狀態(tài)發(fā)生變化,而促使觀察者對象作出相應(yīng)操作的一種行為型模式。如,一個天氣系統(tǒng),當(dāng)天氣變化時,展示給公眾的視圖中會有所反映,這里的天氣是目標(biāo),而視圖是觀察者。6. 答:中介者模式包含:抽象中介者(Mediator )角色、具體中介者( ConcreteMediator )角色、抽象同事類( Colleague )角色、具體同事類( ConcreteCollea
44、gue )角色。其結(jié)構(gòu)圖如下:六、綜合題1解: 對于描述 1) 可以選擇使用工廠方法模式,對于描述2) 可以選擇使用觀察者模式,參考類圖如下所示:.在類圖中, HouseCreator 是抽象房屋工廠類,其子類 VilladomCreator 用于創(chuàng)建別墅 Villadom ,子類 ApartmentCreator 用于創(chuàng)建公寓 Apartment , Villadom 和 Apartment 都是抽象房屋類 House 的子類,此時應(yīng)用了工廠方法模式,如果增加新類型的房屋,只需對應(yīng)增加新的房屋工廠類即可,原有代碼無須做任何修改;House 類同時作為抽象觀察目標(biāo),子類Villadom和 Ap
45、artment 作為具體觀察目標(biāo),相關(guān)人員類Stakeholder作為抽象觀察者,其子類 Manager(主管)作為具體觀察者,實現(xiàn)了在Stakeholder中聲明的response()方法,當(dāng)房屋售出時,房屋的狀態(tài) status 將發(fā)生變化,在 setStatus() 方法中調(diào)用觀察者的 response() 方法,即主管將收到相應(yīng)消息,此時應(yīng)用了觀察者模式。2解: 對于描述 1) 可以選擇使用中介者模式,對于描述2) 可以選擇使用適配器模式,參考類圖如下所示:.在類圖中,各類的角色如下:1 ) 旅游公司:抽象中介者;2 ) 廣之旅:具體中介者;3 ) 大學(xué)生:抽象同事類;4 ) 韶關(guān)學(xué)院學(xué)生:是具體同事類,也是目標(biāo)抽象類;5 ) 哈佛大學(xué)生、墨爾本大學(xué)生:是具體同事類,也是適配者類;6 ) 翻譯 1、翻譯 2:適配器類。3. 解: 1)要完成以上功能,需使用“職責(zé)鏈模式”和“代理模式
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單面窗戶采購合同范本
- 司機(jī)協(xié)議合同范例
- 業(yè)務(wù)員簡單辭職報告
- 通信網(wǎng)絡(luò)管理員高級考試模擬題含參考答案
- 辦卡會員合同范本
- 農(nóng)村固體廢物處理合同范本
- 一周總結(jié)30篇模板
- 壓路機(jī)租用合同范本
- 公司出售寫合同范例
- 2014旅游協(xié)議合同范本
- 人教版小學(xué)數(shù)學(xué)三年級下冊第一單元位置與方向一單元測試
- 雅禮中學(xué)2024-2025學(xué)年初三創(chuàng)新人才選拔數(shù)學(xué)試題及答案
- 2023年蘇州衛(wèi)生職業(yè)技術(shù)學(xué)院高職單招(語文)試題庫含答案解析
- 四年級美術(shù)素養(yǎng)附答案
- 2021年全國中學(xué)生天文奧林匹克競賽預(yù)賽試題及答案
- 四年級下冊音樂教案-2.2我們美麗的祖國 |接力版
- Quantum軟件培訓(xùn)手冊
- 走近人工智能
- 服裝市場營銷項目2服裝市場營銷環(huán)境分析課件
- 中國傳媒大學(xué)《當(dāng)代電視播音主持教程》課件
- 《納米復(fù)合材料》第2章 納米復(fù)合材料概論
評論
0/150
提交評論