軟件開發(fā)與設(shè)計(jì)模式試題及答案解析_第1頁
軟件開發(fā)與設(shè)計(jì)模式試題及答案解析_第2頁
軟件開發(fā)與設(shè)計(jì)模式試題及答案解析_第3頁
軟件開發(fā)與設(shè)計(jì)模式試題及答案解析_第4頁
軟件開發(fā)與設(shè)計(jì)模式試題及答案解析_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

綜合試卷第=PAGE1*2-11頁(共=NUMPAGES1*22頁) 綜合試卷第=PAGE1*22頁(共=NUMPAGES1*22頁)PAGE①姓名所在地區(qū)姓名所在地區(qū)身份證號密封線1.請首先在試卷的標(biāo)封處填寫您的姓名,身份證號和所在地區(qū)名稱。2.請仔細(xì)閱讀各種題目的回答要求,在規(guī)定的位置填寫您的答案。3.不要在試卷上亂涂亂畫,不要在標(biāo)封區(qū)內(nèi)填寫無關(guān)內(nèi)容。一、選擇題1.下列哪個設(shè)計(jì)模式屬于行為型模式?

A.工廠方法

B.觀察者

C.狀態(tài)

D.單例

2.在設(shè)計(jì)模式中,哪種模式適用于將對象與對象的創(chuàng)建過程解耦?

A.建造者模式

B.抽象工廠模式

C.工廠方法模式

D.適配器模式

3.以下哪個設(shè)計(jì)模式主要用于實(shí)現(xiàn)一個算法的多種變體,而使得它們可以互不影響?

A.策略模式

B.模板方法模式

C.責(zé)任鏈模式

D.觀察者模式

4.在設(shè)計(jì)模式中,哪個模式適用于在多個類享代碼,而不需要在每個類中重復(fù)這段代碼?

A.組合模式

B.策略模式

C.工廠方法模式

D.觀察者模式

5.以下哪個設(shè)計(jì)模式用于在對象之間建立一種一對多的依賴關(guān)系,當(dāng)一個對象改變狀態(tài),所有依賴于它的對象都將得到通知并自動更新?

A.觀察者模式

B.責(zé)任鏈模式

C.模板方法模式

D.策略模式

6.以下哪個設(shè)計(jì)模式用于實(shí)現(xiàn)對象間的解耦,使得不同對象之間無需顯式地相互引用?

A.工廠方法模式

B.適配器模式

C.代理模式

D.裝飾者模式

7.在設(shè)計(jì)模式中,哪個模式允許在運(yùn)行時動態(tài)地添加或刪除組件?

A.組合模式

B.適配器模式

C.裝飾者模式

D.代理模式

8.以下哪個設(shè)計(jì)模式用于在系統(tǒng)中創(chuàng)建對象時,將對象的創(chuàng)建邏輯與使用邏輯分離?

A.工廠方法模式

B.抽象工廠模式

C.建造者模式

D.原型模式

答案及解題思路:

1.B.觀察者

解題思路:行為型模式關(guān)注對象之間的通信和交互,觀察者模式正是一個經(jīng)典的通信模式,它定義了對象之間的一對多依賴關(guān)系。

2.C.工廠方法模式

解題思路:工廠方法模式是一種創(chuàng)建型模式,它的核心是解耦對象的創(chuàng)建過程和對象的類,使得類的創(chuàng)建和實(shí)現(xiàn)可以分離。

3.A.策略模式

解題思路:策略模式允許算法的變化獨(dú)立于使用算法的客戶,它通過定義一系列算法,將每一個算法封裝起來,并使它們可以互相替換。

4.A.組合模式

解題思路:組合模式允許將對象組合成樹形結(jié)構(gòu)以表示部分整體的層次結(jié)構(gòu),使得用戶對單個對象和組合對象的使用具有一致性。

5.A.觀察者模式

解題思路:觀察者模式定義了對象之間的一對多依賴關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生變化時,所有依賴于它的對象都會得到通知并自動更新。

6.C.代理模式

解題思路:代理模式提供了一個代理對象,用于控制對另一個對象的訪問,從而實(shí)現(xiàn)對象間的解耦,不同對象之間無需顯式地相互引用。

7.A.組合模式

解題思路:組合模式通過遞歸地組合對象,允許在運(yùn)行時動態(tài)地添加或刪除組件,從而形成樹形結(jié)構(gòu)。

8.C.建造者模式

解題思路:建造者模式用于將一個復(fù)雜對象的構(gòu)建與其表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。它將對象的創(chuàng)建邏輯與使用邏輯分離。二、填空題1.設(shè)計(jì)模式分為三大類:創(chuàng)建型模式、結(jié)構(gòu)型模式和行為型模式。

2.單例模式的主要目的是保證一個類一個實(shí)例,并提供一個訪問它的全局訪問點(diǎn)。

3.工廠方法模式將對象的創(chuàng)建與對象的類分離,使類的實(shí)例化延遲到子類中進(jìn)行。

4.觀察者模式允許一個對象在狀態(tài)改變時通知其他依賴于它的對象。

5.責(zé)任鏈模式將多個對象連成一條鏈,沿著這條鏈傳遞請求,直到有對象處理它為止。

6.策略模式定義了算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化獨(dú)立于使用算法的客戶。

7.適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。

8.裝飾者模式動態(tài)地給一個對象添加一些額外的職責(zé),就增加功能來說,裝飾者模式比子類更為靈活。

答案及解題思路:

1.創(chuàng)建型模式、結(jié)構(gòu)型模式、行為型模式

解題思路:設(shè)計(jì)模式分為這三大類,創(chuàng)建型模式關(guān)注對象的創(chuàng)建過程,結(jié)構(gòu)型模式關(guān)注類和對象的組合,行為型模式關(guān)注對象間的交互。

2.單例模式

解題思路:單例模式通過限制一個類一個實(shí)例,并提供一個全局訪問點(diǎn),保證了該類實(shí)例的唯一性和全局可訪問性。

3.工廠方法模式

解題思路:工廠方法模式通過在子類中實(shí)例化對象,實(shí)現(xiàn)了對象的創(chuàng)建與類的分離,使得對象的創(chuàng)建過程可以延遲到子類中進(jìn)行,增加了系統(tǒng)的靈活性。

4.觀察者模式

解題思路:觀察者模式通過定義對象間的一對多依賴關(guān)系,當(dāng)一個對象狀態(tài)改變時,會自動通知所有依賴它的對象,實(shí)現(xiàn)了解耦。

5.責(zé)任鏈模式

解題思路:責(zé)任鏈模式將請求的發(fā)送和接收分開,使得多個對象都有機(jī)會處理請求,并允許請求在對象間傳遞,直到有一個對象處理它為止。

6.策略模式

解題思路:策略模式通過定義一系列算法,將每個算法封裝起來,使它們可以互相替換,從而允許算法的變化獨(dú)立于使用算法的客戶。

7.適配器模式

解題思路:適配器模式通過提供一個統(tǒng)一的接口,使得原本由于接口不兼容而不能一起工作的那些類可以一起工作,增加了系統(tǒng)的兼容性。

8.裝飾者模式

解題思路:裝飾者模式通過動態(tài)地給一個對象添加一些額外的職責(zé),在不改變其接口的情況下增加功能,提高了代碼的復(fù)用性和靈活性。三、判斷題1.設(shè)計(jì)模式可以提高代碼的可讀性和可維護(hù)性。()

答案:√

解題思路:設(shè)計(jì)模式通過定義一組代碼模板,使得代碼結(jié)構(gòu)更加清晰,便于理解和維護(hù)。使用設(shè)計(jì)模式可以避免代碼重復(fù),減少系統(tǒng)復(fù)雜性,提高代碼的可讀性和可維護(hù)性。

2.工廠方法模式適用于創(chuàng)建復(fù)雜對象時,需要將創(chuàng)建過程分解為多個步驟。()

答案:×

解題思路:工廠方法模式主要適用于創(chuàng)建具有相同類型但具有不同構(gòu)造參數(shù)的對象。當(dāng)創(chuàng)建復(fù)雜對象且需要分解創(chuàng)建過程時,更適合使用建造者模式。

3.觀察者模式中,觀察者對象不需要知道具體被觀察者對象的實(shí)現(xiàn)細(xì)節(jié)。()

答案:√

解題思路:觀察者模式允許對象在狀態(tài)變化時自動通知其他對象,而不需要知道這些對象的具體實(shí)現(xiàn)。這樣實(shí)現(xiàn)了對象間的解耦,提高了系統(tǒng)的靈活性。

4.策略模式適用于多個算法相互獨(dú)立,且需要動態(tài)選擇使用哪個算法的情況。()

答案:√

解題思路:策略模式允許在運(yùn)行時動態(tài)選擇算法,使算法之間相互獨(dú)立。這種方式提高了代碼的靈活性和可擴(kuò)展性。

5.適配器模式可以使原本不兼容的接口變得兼容。()

答案:√

解題思路:適配器模式通過將一個類的接口轉(zhuǎn)換成客戶期望的另一個接口,實(shí)現(xiàn)了不同接口之間的適配。這使得原本不兼容的接口變得兼容。

6.裝飾者模式可以在不修改原有對象的基礎(chǔ)上,為對象添加新的功能。()

答案:√

解題思路:裝飾者模式可以在不改變原有對象的基礎(chǔ)上,動態(tài)地給對象添加新的功能。這種方式提高了代碼的靈活性和可擴(kuò)展性。

7.單例模式適用于系統(tǒng)中一個實(shí)例的情況。()

答案:√

解題思路:單例模式保證一個類一個實(shí)例,并提供一個全局訪問點(diǎn)。這種方式適用于系統(tǒng)中一個實(shí)例的情況,例如數(shù)據(jù)庫連接、文件系統(tǒng)操作等。

8.組合模式適用于處理具有樹形結(jié)構(gòu)的數(shù)據(jù),使得用戶對單個對象和組合對象的使用具有一致性。()

答案:√

解題思路:組合模式允許將對象組合成樹形結(jié)構(gòu)以表示部分整體的層次結(jié)構(gòu)。這種方式使得用戶對單個對象和組合對象的使用具有一致性。四、簡答題1.簡述工廠方法模式的核心思想及其應(yīng)用場景。

工廠方法模式的核心思想是定義一個用于創(chuàng)建對象的接口,讓子類決定實(shí)例化哪一個類。工廠方法使一個類的實(shí)例化延遲到其子類進(jìn)行,從而實(shí)現(xiàn)對象的創(chuàng)建與使用分離。

應(yīng)用場景:

當(dāng)一個類不知道它所必須創(chuàng)建的對象的類的時候。

當(dāng)一個類希望由其子類指定創(chuàng)建的對象的時候。

當(dāng)類將一個對象的創(chuàng)建工作委托給多個輔助類的時候。

2.簡述觀察者模式的核心思想及其應(yīng)用場景。

觀察者模式的核心思想是定義對象間的一種一對多的依賴關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并自動更新。

應(yīng)用場景:

當(dāng)一個抽象模型有兩個方面,其中一個方面依賴于另一個方面時。

當(dāng)一個對象的改變需要同時改變其他對象,而不知道具體有多少對象需要改變時。

當(dāng)一個對象必須通知其他對象,而它又不希望知道這些對象是誰時。

3.簡述策略模式的核心思想及其應(yīng)用場景。

策略模式的核心思想是將算法封裝在獨(dú)立的類中,使它們可以互相替換,從而使算法的變化獨(dú)立于使用算法的客戶。

應(yīng)用場景:

當(dāng)面臨多種算法變體,且需要獨(dú)立于使用算法的客戶進(jìn)行切換時。

當(dāng)算法使用的數(shù)據(jù)結(jié)構(gòu)或算法策略在運(yùn)行時可以動態(tài)改變時。

當(dāng)需要將算法的使用和算法的實(shí)現(xiàn)分離時。

4.簡述適配器模式的核心思想及其應(yīng)用場景。

適配器模式的核心思想是提供一個接口,使原本由于接口不兼容而不能一起工作的那些類可以一起工作。

應(yīng)用場景:

當(dāng)希望使用一個已經(jīng)存在的類,但其接口不符合你的需求時。

當(dāng)想要創(chuàng)建一個可以與舊類接口兼容的新類時。

當(dāng)需要使用一些沒有從同一祖先派生的類時。

5.簡述裝飾者模式的核心思想及其應(yīng)用場景。

裝飾者模式的核心思想是動態(tài)地給一個對象添加一些額外的職責(zé),就增加功能來說,裝飾者模式比子類更為靈活。

應(yīng)用場景:

當(dāng)需要給一個現(xiàn)有的對象添加功能,而添加的功能可以動態(tài)地添加時。

當(dāng)需要擴(kuò)展一個類的功能,但不能采用繼承的方式來實(shí)現(xiàn)時。

當(dāng)需要在不改變現(xiàn)有對象結(jié)構(gòu)的前提下,動態(tài)地添加一些額外的職責(zé)。

6.簡述單例模式的核心思想及其應(yīng)用場景。

單例模式的核心思想是保證一個類一個實(shí)例,并提供一個全局訪問點(diǎn)。

應(yīng)用場景:

當(dāng)一個類需要唯一實(shí)例來控制全局狀態(tài)時。

當(dāng)需要避免因頻繁創(chuàng)建和銷毀對象而導(dǎo)致的系統(tǒng)功能開銷時。

當(dāng)需要保證一個類僅有一個實(shí)例,并提供一個全局訪問點(diǎn)時。

7.簡述組合模式的核心思想及其應(yīng)用場景。

組合模式的核心思想是將對象組合成樹形結(jié)構(gòu)以表示“部分整體”的層次結(jié)構(gòu),使得用戶對單個對象和組合對象的使用具有一致性。

應(yīng)用場景:

當(dāng)需要表示部分與整體的關(guān)系時。

當(dāng)需要組合使用對象和單個對象處理時。

當(dāng)需要實(shí)現(xiàn)用戶對單個對象和組合對象的使用具有一致性時。

答案及解題思路:

1.答案:工廠方法模式的核心思想是將對象的創(chuàng)建延遲到子類中進(jìn)行,應(yīng)用場景包括類不知道它所必須創(chuàng)建的對象的類、類希望由其子類指定創(chuàng)建的對象等。

解題思路:理解工廠方法模式的基本定義和作用,結(jié)合實(shí)際案例進(jìn)行分析。

2.答案:觀察者模式的核心思想是一對多的依賴關(guān)系,當(dāng)一個對象狀態(tài)改變時,所有依賴它的對象都得到通知并更新,應(yīng)用場景包括抽象模型有兩個方面、一個對象的改變需要通知其他對象等。

解題思路:理解觀察者模式的基本定義和作用,結(jié)合實(shí)際案例進(jìn)行分析。

3.答案:策略模式的核心思想是將算法封裝在獨(dú)立的類中,使它們可以互相替換,應(yīng)用場景包括算法變體、數(shù)據(jù)結(jié)構(gòu)或算法策略在運(yùn)行時可以動態(tài)改變等。

解題思路:理解策略模式的基本定義和作用,結(jié)合實(shí)際案例進(jìn)行分析。

4.答案:適配器模式的核心思想是提供一個接口,使原本由于接口不兼容而不能一起工作的那些類可以一起工作,應(yīng)用場景包括使用已經(jīng)存在的類、創(chuàng)建與舊類接口兼容的新類等。

解題思路:理解適配器模式的基本定義和作用,結(jié)合實(shí)際案例進(jìn)行分析。

5.答案:裝飾者模式的核心思想是動態(tài)地給一個對象添加一些額外的職責(zé),應(yīng)用場景包括給現(xiàn)有對象添加功能、擴(kuò)展類的功能等。

解題思路:理解裝飾者模式的基本定義和作用,結(jié)合實(shí)際案例進(jìn)行分析。

6.答案:單例模式的核心思想是保證一個類一個實(shí)例,并提供一個全局訪問點(diǎn),應(yīng)用場景包括控制全局狀態(tài)、避免功能開銷等。

解題思路:理解單例模式的基本定義和作用,結(jié)合實(shí)際案例進(jìn)行分析。

7.答案:組合模式的核心思想是將對象組合成樹形結(jié)構(gòu)以表示“部分整體”的層次結(jié)構(gòu),應(yīng)用場景包括表示部分與整體的關(guān)系、組合使用對象和單個對象處理等。

解題思路:理解組合模式的基本定義和作用,結(jié)合實(shí)際案例進(jìn)行分析。五、論述題1.結(jié)合實(shí)際項(xiàng)目,論述設(shè)計(jì)模式在軟件開發(fā)中的應(yīng)用價(jià)值。

在軟件開發(fā)過程中,設(shè)計(jì)模式作為一種成熟的設(shè)計(jì)理念和方法論,能夠顯著提升軟件的模塊化、復(fù)用性、可擴(kuò)展性和可維護(hù)性。以下通過一個實(shí)際項(xiàng)目案例來闡述設(shè)計(jì)模式的應(yīng)用價(jià)值:

案例背景:某在線教育平臺開發(fā)項(xiàng)目,該平臺需要提供視頻、直播、在線測試等功能。為了應(yīng)對功能不斷擴(kuò)展的需求,開發(fā)團(tuán)隊(duì)采用了多種設(shè)計(jì)模式,其應(yīng)用價(jià)值:

單例模式:用于創(chuàng)建平臺配置對象,保證整個應(yīng)用程序中一個實(shí)例存在,便于集中管理配置信息。

工廠模式:用于創(chuàng)建各種類型的課程、用戶等對象,降低對象的創(chuàng)建過程和復(fù)雜度,便于擴(kuò)展。

策略模式:用于處理不同課程播放策略,如視頻、直播、測試等,提高了系統(tǒng)的可擴(kuò)展性。

觀察者模式:用于處理用戶訂閱課程、觀看直播等事件,實(shí)現(xiàn)了模塊之間的解耦。

通過以上設(shè)計(jì)模式的應(yīng)用,項(xiàng)目實(shí)現(xiàn)了快速開發(fā)、靈活擴(kuò)展、易于維護(hù)的特點(diǎn)。

2.針對以下場景,分別選擇合適的設(shè)計(jì)模式,并簡要說明理由:

(1)實(shí)現(xiàn)一個支付系統(tǒng),其中包含多種支付方式(如支付、銀聯(lián)支付等)。

選擇設(shè)計(jì)模式:策略模式

簡要說明理由:策略模式允許在運(yùn)行時選擇算法的行為。在這個場景中,不同的支付方式可以看作是不同的算法,策略模式使得添加新的支付方式變得容易,同時也便于系統(tǒng)管理各種支付方式。

(2)設(shè)計(jì)一個圖書管理系統(tǒng),需要處理多種圖書類型(如小說、科技、教育等)。

選擇設(shè)計(jì)模式:工廠方法模式

簡要說明理由:工廠方法模式用于創(chuàng)建對象時,不是直接實(shí)例化對象,而是通過工廠類創(chuàng)建對象的實(shí)例。這樣可以在不修改原有類代碼的情況下,添加新的圖書類型,同時使得代碼更加模塊化和可維護(hù)。

(3)實(shí)現(xiàn)一個日志系統(tǒng),需要記錄不同級別的日志信息(如info、error、warn等)。

選擇設(shè)計(jì)模式:適配器模式

簡要說明理由:適配器模式用于將一個類的接口轉(zhuǎn)換成客戶期望的另一個接口,使得原本由于接口不兼容而不能一起工作的類可以一起工作。在這個場景中,不同級別的日志信息可以通過適配器轉(zhuǎn)換為統(tǒng)一的日志接口,便于統(tǒng)一管理和處理。

(4)設(shè)計(jì)一個用戶權(quán)限管理系統(tǒng),需要根據(jù)用戶角色動態(tài)地分配權(quán)限。

選擇設(shè)計(jì)模式:動態(tài)代理模式

簡要說明理由:動態(tài)代理模式允許在運(yùn)行時創(chuàng)建代理實(shí)例,并在代理實(shí)例中處理目標(biāo)對象的調(diào)用。在這個場景中,根據(jù)用戶角色動態(tài)分配權(quán)限,可以使用動態(tài)代理來攔截和修改用戶的請求,實(shí)現(xiàn)權(quán)限的控制和動態(tài)分配。

答案及解題思路:

1.設(shè)計(jì)模式在軟件開發(fā)中的應(yīng)用價(jià)值主要體現(xiàn)在以下方面:

提高模塊化程度,使系統(tǒng)更易于理解和維護(hù)。

提高代碼復(fù)用性,降低代碼冗余。

提高系統(tǒng)擴(kuò)展性,適應(yīng)功能需求的不斷變化。

提高代碼的可測試性,便于單元測試和集成測試。

2.針對各個場景的選擇理由:

(1)策略模式適用于需要根據(jù)不同條件選擇不同算法的場景。

(2)工廠方法模式適用于需要根據(jù)不同的輸入創(chuàng)建不同對象類型的場景。

(3)適配器模式適用于需要將不同接口的類轉(zhuǎn)換成統(tǒng)一的接口的場景。

(4)動態(tài)代理模式適用于需要動態(tài)創(chuàng)建代理對象并攔截和處理方法調(diào)用的場景。六、編程題1.實(shí)現(xiàn)一個工廠方法模式,創(chuàng)建不同類型的交通工具對象。

//交通工具接口

interfaceVehicle{

voidrun();

}

//汽車類

classCarimplementsVehicle{

publicvoidrun(){

System.out.println("Carisrunningonroad.");

}

}

//飛機(jī)類

classAirplaneimplementsVehicle{

publicvoidrun(){

System.out.println("Airplaneisflyinginthesky.");

}

}

//工廠接口

interfaceVehicleFactory{

VehiclecreateVehicle();

}

//汽車工廠類

classCarFactoryimplementsVehicleFactory{

publicVehiclecreateVehicle(){

returnnewCar();

}

}

//飛機(jī)工廠類

classAirplaneFactoryimplementsVehicleFactory{

publicVehiclecreateVehicle(){

returnnewAirplane();

}

}

//客戶端代碼

publicclassFactoryMethodPattern{

publicstaticvoidmain(Stringargs){

VehicleFactorycarFactory=newCarFactory();

Vehiclecar=carFactory.createVehicle();

car.run();

VehicleairplaneFactory=newAirplaneFactory();

Vehicleairplane=airplaneFactory.createVehicle();

airplane.run();

}

}

2.實(shí)現(xiàn)一個觀察者模式,當(dāng)某個數(shù)據(jù)變化時,通知所有訂閱者。

//觀察者接口

interfaceObserver{

voidupdate(Objectdata);

}

//被觀察者接口

interfaceSubject{

voidregisterObserver(Observero);

voidremoveObserver(Observero);

voidnotifyObservers();

}

//具體觀察者類

classConcreteObserverimplementsObserver{

publicvoidupdate(Objectdata){

System.out.println("Observerreceiveddata:"data);

}

}

//具體被觀察者類

classConcreteSubjectimplementsSubject{

privateListobservers=newArrayList();

privateObjectdata;

publicvoidregisterObserver(Observero){

observers.add(o);

}

publicvoidremoveObserver(Observero){

observers.remove(o);

}

publicvoidnotifyObservers(){

for(Observerobserver:observers){

observer.update(data);

}

}

publicvoidsetData(Objectdata){

this.data=data;

notifyObservers();

}

}

//客戶端代碼

publicclassObserverPattern{

publicstaticvoidmain(Stringargs){

ConcreteSubjectsubject=newConcreteSubject();

Observerobserver=newConcreteObserver();

subject.registerObserver(observer);

subject.setData("Datachanged");

subject.removeObserver(observer);

subject.setData("Datachangedagain");

}

}

3.實(shí)現(xiàn)一個策略模式,根據(jù)不同情況動態(tài)選擇不同的排序算法。

//排序策略接口

interfaceSortStrategy{

voidsort(intarray);

}

//冒泡排序策略

classBubbleSortStrategyimplementsSortStrategy{

publicvoidsort(intarray){

//實(shí)現(xiàn)冒泡排序算法

}

}

//快速排序策略

classQuickSortStrategyimplementsSortStrategy{

publicvoidsort(intarray){

//實(shí)現(xiàn)快速排序算法

}

}

//客戶端代碼

publicclassStrategyPattern{

publicstaticvoidmain(Stringargs){

intarray={5,3,8,4,1};

SortStrategybubbleSort=newBubbleSortStrategy();

bubbleSort.sort(array);

SortStrategyquickSort=newQuickSortStrategy();

quickSort.sort(array);

}

}

4.實(shí)現(xiàn)一個適配器模式,將不兼容的接口轉(zhuǎn)換為兼容的接口。

//目標(biāo)接口

interfaceTarget{

voidrequest();

}

//被適配的類

classAdaptee{

publicvoidspecificRequest(){

System.out.println("Specificrequest.");

}

}

//適配器類

classAdapterimplementsTarget{

privateAdapteeadaptee;

publicAdapter(Adapteeadaptee){

this.adaptee=adaptee;

}

publicvoidrequest(){

adaptee.specificRequest();

}

}

//客戶端代碼

publicclassAdapterPattern{

publicstaticvoidmain(Stringargs){

Targettarget=newAdapter(newAdaptee());

target.request();

}

}

5.實(shí)現(xiàn)一個裝飾者模式,為字符串對象添加新的功能。

//組件接口

interfaceComponent{

Stringdisplay();

}

//字符串組件

classStringComponentimplementsComponent{

privateStringstr;

publicStringComponent(Stringstr){

this.str=str;

}

publicStringdisplay(){

returnstr;

}

}

//裝飾者類

classDecoratorimplementsComponent{

privateComponentponent;

publicDecorator(Componentponent){

this.ponent=ponent;

}

publicStringdisplay(){

returnponent.display()"decorated";

}

}

//客戶端代碼

publicclassDecoratorPattern{

publicstaticvoidmain(Stringargs){

ComponentstringComponent=newStringComponent("Hello");

ComponentdecoratedComponent=newDecorator(stringComponent);

System.out.println(decoratedComponent.display());

}

}

6.實(shí)現(xiàn)一個單例模式,保證一個類一個實(shí)例。

//單例類

classSingleton{

privatestaticSingletoninstance;

privateSingleton(){}

publicstaticSingletongetInstance(){

if(instance==null){

instance=newSingleton();

}

returninstance;

}

}

//客戶端代碼

publicclassSingletonPattern{

publicstaticvoidmain(Stringargs){

Singletonsingleton=Singleton.getInstance();

System.out.println(singleton);

}

}

7.實(shí)現(xiàn)一個組合模式,處理具有樹形結(jié)構(gòu)的數(shù)據(jù)。

//組合模式中的組件接口

interfaceComponent{

voidoperation();

voidadd(Componentc);

voidremove(Componentc);

ComponentgetChild(inti);

}

//葉子節(jié)點(diǎn)類

classLeafimplementsComponent{

publicvoidoperation(){

System.out.println("Leafoperation");

}

publicvoidadd(Componentc){

//葉子節(jié)點(diǎn)不處理添加操作

}

publicvoidremove(Componentc){

//葉子節(jié)點(diǎn)不處理移除操作

}

publicComponentgetChild(inti){

returnnull;

}

}

//樹節(jié)點(diǎn)類

classCompositeimplementsComponent{

privateListchildren=newArrayList();

publicvoidoperation(){

System.out.println("Composi

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論