設(shè)計模式考點_第1頁
設(shè)計模式考點_第2頁
設(shè)計模式考點_第3頁
設(shè)計模式考點_第4頁
設(shè)計模式考點_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上設(shè)計模式題庫-自編版選擇題1、設(shè)計模式具有( )的優(yōu)點。A、提高系統(tǒng)性能 B、降低軟件規(guī)模和復(fù)雜度C、減少代碼開發(fā)工作量 D、提升軟件設(shè)計的質(zhì)量2、 在面向?qū)ο筌浖拈_發(fā)中,采用設(shè)計模式( )。 A、 可以減少在設(shè)計和過程中需要創(chuàng)建的實例對象的數(shù)量B、 可以保證程序的運(yùn)行速度達(dá)到最優(yōu)值C、 可以復(fù)用相似問題的相同解決方案D、 允許在非面向?qū)ο蟪绦蛟O(shè)計語言中使用面向?qū)ο蟮母拍?、 ( )都是行為型設(shè)計模式。A、 組合模式、適配者模式和代理模式B、 觀察者模式、職責(zé)鏈模式和策略模式C、 原型模式、建造者模式和單例模式D、 迭代器模式、命令模式和橋接模式4.開閉原則是面向?qū)?/p>

2、象的可復(fù)用設(shè)計的基石,開閉原則是指一個軟件實體應(yīng)當(dāng)對( )開放,對( )關(guān)閉;里氏代換原則是指任何( )可以出現(xiàn)的地方,( )一定可以出現(xiàn);依賴倒置原則就是依賴于( ),而不要依賴于( ),或者說要針對接口編程,不要針對實現(xiàn)編程。A、修改 B、擴(kuò)展 C、分析 D、設(shè)計A、修改 B、擴(kuò)展 C、分析 D、設(shè)計A、變量 B、常量 C、基類對象 D、子類對象A、變量 B、常量 C、基類對象 D、子類對象A、程序設(shè)計語言 B、建模語言 C、實現(xiàn) D、抽象A、程序設(shè)計語言 B、建模語言 C、實現(xiàn) D、抽象5.關(guān)于單一責(zé)原則,以下敘述錯誤的是( )。A、 一個雷只負(fù)責(zé)一個功能領(lǐng)域中的相應(yīng)職責(zé)。B、 就一個類

3、而言,應(yīng)該有且僅有一個引起它變化的原因。C、 一個類承擔(dān)的職責(zé)越多,越容易復(fù)用,被復(fù)用的可能性越大。D、 當(dāng)一個類承擔(dān)的職責(zé)過多時,需要將職責(zé)進(jìn)行分離,將不同的職責(zé)封裝 在不同的類中。6.以下關(guān)于面向?qū)ο笤O(shè)計的的敘述中,錯誤的是( )。A、 高層模塊不應(yīng)該依賴于低層模塊。B、 抽象不應(yīng)該依賴于細(xì)節(jié)。C、 細(xì)節(jié)可以依賴于抽象。D、 高層模塊無法不依賴于低層模塊。7.在系統(tǒng)設(shè)計中應(yīng)用迪米特法則,以下敘述有誤的是( )。A、 在類的劃上,一個盡量創(chuàng)建松耦合的類,類的耦合度越低,復(fù)用越容易。B、 如果兩個類之間不必彼此直接通信,那么這兩個類就不應(yīng)該發(fā)生直接的相互作用。C、 在對其他類的引用上,一個對象

4、對其他對象的引用應(yīng)該降到最低。D、 在類的設(shè)計上,只要有可能,一個類型應(yīng)該盡量設(shè)計成抽象類或接口,且成員變量和成員函數(shù)的訪問權(quán)限最好設(shè)置為公開的。8.在簡單工廠模式中,如果需要增加新的具體產(chǎn)品,通常需要修改( )的源代碼。A、抽象產(chǎn)品類 B、其他具體產(chǎn)品類 C、工廠類 D、客戶類9.以下關(guān)于簡單工廠模式敘述錯誤的是( )。A、簡單工廠模式可以根據(jù)參數(shù)的不同返回不同的產(chǎn)品類的實例。B、簡單工廠模式專門定義一個類來負(fù)責(zé)創(chuàng)建其他類的實例,被創(chuàng)建的實例通常都具有共同的父類。C、簡單工廠模式可以減少系統(tǒng)中的類的個數(shù),簡化系統(tǒng)的設(shè)計,使得系統(tǒng)更易于理解。D、系統(tǒng)的擴(kuò)展困難,在添加新的產(chǎn)品時需要修好工廠的業(yè)

5、務(wù)邏輯,違背了開閉原則。10.以下代碼使用了( )模式。abstract class Product專心-專注-專業(yè)public abstract void Process();class ConcreateProductB:ProductPublic override void Process().Class FactoryPublic static Product CreateProduct(char type)Switch(type)Case A:Return new ConcreateProductA(); break;Case B:Return new ConcreateProduc

6、tB();break;A、 Simple Factory B、Factory Method B、 C、Abstract Factory D、未使用任何設(shè)計模式11.不同品牌的手機(jī)應(yīng)該由不同是公司所造,例如Motorola公司生產(chǎn)Motorola手機(jī),Nokia公司生產(chǎn)Nokia手機(jī)。該場景蘊(yùn)含了( )模式。A、Simple Factory B、Factory Method C、Abstract Factory D、Builder12.以下關(guān)于工廠方法模式的敘述錯誤的是( )。A、 在工廠方法模式中引入了抽象工廠類,二具體產(chǎn)品的場景延遲到具體工廠中實現(xiàn)B、 使用工廠方法模式添加新的產(chǎn)品對象很容易

7、,無須對原有系統(tǒng)進(jìn)行修改,符合開閉原則C、 工廠方法模式存在的問題是在添加新產(chǎn)品時,需要編寫新的具體產(chǎn)品類,而且提供與之對應(yīng)的具體工廠類,隨著類個數(shù)的增加,會給系統(tǒng)帶來一些額外開銷。D、 工廠方法模式是所有形式的工廠模式中的最為抽象和最具一般性的一種形態(tài),工廠方法模式退化后可以演變成抽象工廠模式。13.某銀行系統(tǒng)采用工廠模式描述其不同賬戶之間的關(guān)系,設(shè)計出的類圖如圖4-7所示。其中,與工廠模式中的“Creator”角色相對應(yīng)的類是();與“Product”角色相對應(yīng)的類是( )。A、BankB、AccountC、CheckingD、SavingsA、BankB、AccountC、Checkin

8、gD、Savings14、關(guān)于C#中的MemberwiseClone()方法,以下敘述有誤的是( )。A、對于對象x,都有x.MemberwiseClone()=xB、對于對象x,都有x.MemberwiseClone().GetType()=x.GetType()C、對于對象x的成員對象Member,都有x.MemberwiseClone().Menber=x.MemberD、對于對象x的成員對象Member,都有x.MemberwiseClone().Member.GetType()=x.Member.GetType.15.以下關(guān)于原型模式敘述錯誤的是( )。A、 原型模式通過給出一個原型

9、對象來指明所要創(chuàng)建的對象的類型,然后用復(fù)制這個原型對象的方法創(chuàng)建出更多同類型的對象B、 淺克隆僅僅復(fù)制所考慮的對象,而不復(fù)制它所引用的對象,也就是其中的成員對象并不復(fù)制C、 在原型模式中實現(xiàn)深克隆時通常需要編寫較為復(fù)雜的代碼D、 在原型模式中不需要為每一個類配備一個克隆方法,因此對于原型模式的擴(kuò)展很靈活,對于已有類的改造也較為容易16.某公司要開發(fā)一個即時聊天軟件,用戶在聊天過程中可以與多位好友同時聊天,在私聊時將產(chǎn)生多個聊天窗口,為了提高聊天窗口的創(chuàng)建效率,要去根據(jù)第一個窗口快速創(chuàng)建其他窗口。針對這種需求,采用()進(jìn)行設(shè)計最為合適。A、 享元模式B、單例模式C、原型模式D、組合模式17.在(

10、)時可使用單例模式。A、 隔離菜單項對象的創(chuàng)建和使用B、 防止一個資源管理器窗口被實例化多次C、 使用一個已有的查找算法而不想修改既有代碼D、 不能創(chuàng)建子類,需要擴(kuò)展一個數(shù)據(jù)過濾器18.以下關(guān)于單例模式的描述,正確的是()。A、 它描述了只有一個方法的類的集合B、 它能夠保證一個類只產(chǎn)生一個唯一的實例C、 它描述了只有一個屬性的類的集合D、 它能夠保證一個類的方法只能被一個唯一的類調(diào)用19.以下()不是單例模式的要點。A、 某個類只能有一個實例B、 單例類不能被繼承C、 必須自行創(chuàng)建單個實例D、 必須自行向整個系統(tǒng)提供單個實例20、()將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口,使得原本由于接

11、口不兼容而不能一起工作的那些類可以一起工作。A、命令(Command)模式B、適配器(Adapter)模式C、策略(Strategy)模式D、單例(Simple)模式21.以下關(guān)于適配器模式的敘述錯誤的是()。A、 適配器模式將一個接口裝換成客戶希望的另一個接口,使得原本由于接口不兼容那些類可以一起工作。B、 在類適配器中,Adapter和Adaptee是繼承關(guān)系,而在對象適配器中,Adapter和Adaptee是關(guān)聯(lián)關(guān)系。C、 類適配器比對象適配器更加靈活,在C#語言中可以通過類適配器一次視頻多個適配者類。D、 適配器可以在不修改原來的適配者接口Adaptee的情況下將一個類的接口和另一個類

12、的接口匹配起來。22.現(xiàn)需要開發(fā)一個文件轉(zhuǎn)換軟件,將文件由一種格式轉(zhuǎn)換為另一種格式,例如將XML文件轉(zhuǎn)換為PDF文件,將DOC文件轉(zhuǎn)換為TXT文件,有些文件格式轉(zhuǎn)換代碼已經(jīng)存在,為了將已有的代碼應(yīng)用于新軟件,而不需要修改軟件的整體結(jié)構(gòu),可以使用()模式進(jìn)行系統(tǒng)設(shè)計。A、 適配器(Adapter)B、組合(Composite)C、外觀(Faced)D、橋接(Bridge)23.在對象適配器模式中,適配器類(Adapter)和適配者類(Adaptee)之間的關(guān)系為()。A、 關(guān)聯(lián)關(guān)系B、依賴關(guān)系C、繼承關(guān)系D、實現(xiàn)關(guān)系24.()模式將抽象部分與它的實現(xiàn)部分相分離,使它們都可以獨立地變化。圖10-7

13、所示為該模式的圖,其中,()用于定義實現(xiàn)部分的接口。A、單例(Simple) B、橋接(Bridge) C、組合(Composite) D、外觀(Faced)A、AbstractionB、ConcreteImplementorA C、ConcreteImplementorBD、Implementor25.以下關(guān)于橋接模式的敘述錯誤的是()。A、 橋接模式的用意是將抽象化與實現(xiàn)化解耦,使得亮著可以獨立地變化。B、 橋接模式將繼承關(guān)系轉(zhuǎn)換成關(guān)聯(lián)關(guān)系,從而降低系統(tǒng)的耦合度。C、 橋接模式來源動態(tài)地給一個對象增加功能,這些功能也可以動態(tài)的撤銷。D、 橋接模式可以從接口中分離實現(xiàn)功能,使得設(shè)計更具有擴(kuò)展

14、性。26.()不是橋接模式所適用的環(huán)境。A、 一個可以跨平臺并支持多種格式的文件編輯器B、 一個支持多數(shù)據(jù)源的報表生成工具,可以以不同的圖形方式顯示報表信息C、 一個可動態(tài)選擇排序算法的數(shù)據(jù)操作工具D、 一個支持多種編程語言的跨平臺開發(fā)工具27.當(dāng)不能采用生成子類的方法進(jìn)行擴(kuò)展時,可采用()模式動態(tài)地給一個對象添加一些額外的職責(zé)。A、外觀(Faced) B、單例(Simple) C、參與者(Participant) D、裝飾(Decorator)1、 以下()不是裝飾模式的適用條件。A、 要擴(kuò)展一個類的功能或給一個類增加附加責(zé)任B、 要動態(tài)地給一個對象增加功能,這些功能還可以動態(tài)撤銷C、 要動

15、態(tài)組合多于一個的抽象化角色和實現(xiàn)化角色D、 要通過一些基本功能的組合產(chǎn)生復(fù)雜功能,而不使用繼承關(guān)系28.Windows操作系統(tǒng)中的應(yīng)用程序快捷方式是()模式的應(yīng)用實例。A、代理(Proxy) B、組合(Composite) C、裝飾(Decorator) D、外觀(Faced)1、 以下關(guān)于代理模式的敘述錯誤的是()。A、 代理模式能夠協(xié)調(diào)調(diào)用者和被調(diào)用者,從而在一定程度上降低系統(tǒng)的耦合度B、 控制對一個對象的訪問,給不同的用戶提供不同級別的使用權(quán)限時可以考慮使用遠(yuǎn)程代理C、 代理模式的缺點是請求的處理速度會變慢,并且實現(xiàn)代理模式需要額外的工作D、 代理模式給某一個對象提供一個代理,并由代理對

16、象控制對原對象的引用29.代理模式有多種類型,其中,智能引用代理是指()。A、 為某一個目標(biāo)操作的結(jié)果提供臨時的存儲空間,以便多個客戶端可以共享這些結(jié)果B、 保護(hù)目標(biāo)不讓惡意用戶接近C、 使幾個用戶能夠同時使用一個對象而沒有沖突D、 當(dāng)一個對象被引用時,提供一些額外的操作,例如將此對象被調(diào)用的次數(shù)記錄下來30.以下關(guān)于命令模式的敘述錯誤的是()。A、 命令模式將一個請求封裝為一個對象,從而可以用不同的請求對客戶進(jìn)行參數(shù)化B、 命令模式可以將請求發(fā)送至和請求接受者解耦C、 使用命令模式會導(dǎo)致某些系統(tǒng)有過多的具體命令類,導(dǎo)致在有些系統(tǒng)中命令模式變得不切實際D、 命令模式是對命令的封裝,命令模式把發(fā)

17、出命令的責(zé)任和執(zhí)行命令的責(zé)任機(jī)制在同一個類中,委派給同意的類來進(jìn)行處理31.在()時無需使用命令模式。A、 實現(xiàn)撤銷操作和恢復(fù)操作B、 將請求的發(fā)送者和接收者解耦C、 不改變聚合類的前提下定義作用于聚合中元素的新操作D、 不同的時間指定請求,并將請求排隊32.()模式定義了對象間的一種一對多的依賴關(guān)系,以便當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并自動刷新。A、 適配器(Adapter) B、迭代器(Iterator) C、原型(Prototype) D、觀察者(Observer)33.在觀察者模式中,( )。A、 一個Subject對象可對應(yīng)多個Observer對象B、 Su

18、bject只能有一個ConcreteSubject子類C、 Observer只能有一個ConcreteObserver子類D、 一個Subject對象必須至少對應(yīng)一個Observer對象34.下面這句話隱含了()模式。我和妹妹跟媽媽說:“媽媽,我和妹妹在院子里玩。飯做好了叫我們一聲?!盇、 適配器B、職責(zé)鏈C、觀察者D、迭代器簡答題1. 什么是設(shè)計模式,它包含那些基本要素? 設(shè)計模式是一套反復(fù)使用的、多數(shù)人知曉、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié),使用設(shè)計模式是為了可重用代碼、讓代碼更容易被他人理解并且提高代碼的可靠性。設(shè)計模式是一種用于對軟件系統(tǒng)中不斷重現(xiàn)的設(shè)計問題的解決方案進(jìn)行文檔化的技術(shù)

19、,也是一種共享專家設(shè)計經(jīng)驗的技術(shù)。設(shè)計模式的基本要素:模式名稱、問題、目的、解決方案、效果、實例代碼、相關(guān)設(shè)計模式(其中有4個關(guān)鍵要素:模式名稱、問題、解決方案、效果)2. 設(shè)計模式如何分類,每一類設(shè)計模式有何優(yōu)點? (1)根據(jù)目的可分為創(chuàng)建型,結(jié)構(gòu)型和行為型; 創(chuàng)建型模式主要用于創(chuàng)建對象 結(jié)構(gòu)型模式主要用于處理類或?qū)ο蟮慕M合 行為型模式主要用于描述類或?qū)ο笕绾谓换ズ驮鯓臃峙渎氊?zé) (2)根據(jù)范圍,即模式主要是處理類之間的關(guān)系還是處理對象之間的關(guān)系,可分為類模式和對象模式; 類模式處理類和子類之間的關(guān)系,這些關(guān)系通過繼承建立,在編譯時刻就被確定下來,是一種靜態(tài)關(guān)系 對象模式處理對象間的關(guān)系,這些

20、關(guān)系在運(yùn)行時變化,更具動態(tài)性3. 設(shè)計模式具有哪些優(yōu)點?(1)融合了眾多專家的經(jīng)驗,并以一種標(biāo)準(zhǔn)的形式供廣大開發(fā)人員所用(2)提供了一套通用的設(shè)計詞匯和一種通用的語言,以方便開發(fā)人員之間進(jìn)行溝通和交流,使得設(shè)計方案更加通俗易懂(3)讓人們可以更加簡單方便地復(fù)用成功的設(shè)計和體系結(jié)構(gòu)(4)使得設(shè)計方案更加靈活,且易于修改(5)將提高軟件系統(tǒng)的開發(fā)效率和軟件質(zhì)量,且在一定程度上節(jié)約設(shè)計成本(6)有助于初學(xué)者更深入地理解面向?qū)ο笏枷?,方便閱讀和學(xué)習(xí)現(xiàn)有類庫與其他系統(tǒng)中的源代碼,還可以提高軟件的設(shè)計水平和代碼質(zhì)量4. 常見的設(shè)計模式有哪些優(yōu)點?簡單工廠模式:(1)實現(xiàn)了對象創(chuàng)建和使用的分離;(2)客戶端

21、無須知道所創(chuàng)建的具體產(chǎn)品類的類名,只需要知道具體產(chǎn)品類所對應(yīng)的參數(shù)即可;工廠方法模式:(1)工廠方法用來創(chuàng)建客戶所需要的產(chǎn)品,同時還向客戶隱藏了哪種具體產(chǎn)品類將被實例化這一細(xì)節(jié);(2)能夠讓工廠自主確定創(chuàng)建何種產(chǎn)品對象,而如何創(chuàng)建這個對象的細(xì)節(jié)則完全封裝在具體工廠內(nèi)部;(3)在系統(tǒng)中加入新產(chǎn)品時,完全符合開閉原則;單例模式:(1)提供了對唯一實例的受控訪問;(2)可以節(jié)約系統(tǒng)資源,提高系統(tǒng)的性能;原型模式:(1)簡化對象的創(chuàng)建過程,通過復(fù)制一個已有實例可以提高新實例的創(chuàng)建效率擴(kuò)展性較好;(2)提供了簡化的創(chuàng)建結(jié)構(gòu),原型模式中產(chǎn)品的復(fù)制是通過封裝在原型類中的克隆方法實現(xiàn)的,無須專門的工廠類來創(chuàng)建

22、產(chǎn)品;(3)可以使用深克隆的方式保存對象的狀態(tài),以便在需要的時候使用,可輔助實現(xiàn)撤銷操作;適配器模式:(1)將目標(biāo)類和適配者類解耦,通過引入一個適配器類來重用現(xiàn)有的適配者類,無須修改原有結(jié)構(gòu);(2)增加了類的透明性和復(fù)用性,提高了適配者的復(fù)用性,同一個適配者類可以在多個不同的系統(tǒng)中復(fù)用;(3)靈活性和擴(kuò)展性非常好;裝飾模式:(1)對于擴(kuò)展一個對象的功能,裝飾模式比繼承更加靈活,不會導(dǎo)致類的個數(shù)急劇增加;(2)可以通過一種動態(tài)的方式來擴(kuò)展一個對象的功能,通過配置文件可以在運(yùn)行時選擇不同的具體裝飾類,從而實現(xiàn)不同的行為;(3)可以對一個對象進(jìn)行多次裝飾;(4)具體構(gòu)件類與具體裝飾類可以獨立變化,用

23、戶可以根據(jù)需要增加新的具體構(gòu)件類和具體裝飾類,且原有類庫代碼無須改變,符合開閉原則;代理模式:(1)能夠協(xié)調(diào)調(diào)用者和被調(diào)用者,在一定程度上降低了系統(tǒng)的耦合度;(2)客戶端可以針對抽象主題角色進(jìn)行編程,增加和更換代理類無須修改源代碼,符合開閉原則,系統(tǒng)具有較好的靈活性和可擴(kuò)展性;橋梁模式:(1)需要在抽象化和具體化之間增加更多的靈活性,避免在兩個層次之間建立靜態(tài)的繼承關(guān)系;(2)抽象部分和實現(xiàn)部分可以以繼承的方式獨立擴(kuò)展而互不影響;(3)一個類存在兩個(或多個)獨立變化的維度,且這兩個(或多個)維度都需要獨立地進(jìn)行擴(kuò)展不希望使用繼承或因為多層繼承導(dǎo)致系統(tǒng)類的個數(shù)急劇增加的系統(tǒng);觀察者模式:(1)

24、可以實現(xiàn)表示層和數(shù)據(jù)邏輯層的分離;(2)在觀察目標(biāo)和觀察者之間建立一個抽象的耦合;(3)支持廣播通信,簡化了一對多系統(tǒng)設(shè)計的難度;(3)符合開閉原則,增加新的具體觀察者無須修改原有系統(tǒng)代碼,在具體觀察者與觀察目標(biāo)之間不存在關(guān)聯(lián)關(guān)系的情況下,增加新的觀察目標(biāo)也很方便;命令模式:(1)降低了系統(tǒng)的耦合度;(2)新的命令可以很容易地加入到系統(tǒng)中,符合開閉原則;(3)可以比較容易地設(shè)計一個命令隊列或宏命令(組合命令);(4)為請求的撤銷(Undo)和恢復(fù)(Redo)操作提供了一種設(shè)計和實現(xiàn)方案;5. 透明與半透明模式透明模式:客戶端完全對抽象編程;半透明模式:使用具體裝飾類型定義裝飾之后的類,而具體構(gòu)

25、件可以繼續(xù)使用抽象構(gòu)件類型來定義;不可以實現(xiàn)對同一個對象的多次修飾。6. 設(shè)計原則的概念(前四個)、優(yōu)點。單一職責(zé)原則:一個對象應(yīng)該只包含單一的職責(zé),并且該職責(zé)被完整地封裝在一個類中。優(yōu)點:(1)類的復(fù)雜度降低,實現(xiàn)什么職責(zé)都有清晰明確的定義;(2)可讀性提高;復(fù)雜度降低,那當(dāng)然可讀性提高了;(3)可維護(hù)性提高,可讀性提高,那就更容易維護(hù)了;(4)變更引起的風(fēng)險降低;也就是說提高了擴(kuò)展性和可維護(hù)性開閉原則:軟件實體應(yīng)當(dāng)對擴(kuò)展開放,對修改關(guān)閉。優(yōu)點:方便對系統(tǒng)進(jìn)行擴(kuò)展,在擴(kuò)展時無需修改代碼,提高系統(tǒng)的穩(wěn)定性和延續(xù)性。里士代換原則:所有引用基類的地方必須能透明地使用其子類的對象。優(yōu)點:運(yùn)行時,子類

26、實例替換父類實例,可以很方便地擴(kuò)展系統(tǒng)的功能,無須修改原有子類的代碼,增加一個新的功能可以通過增加一個新的子類來實現(xiàn)。依賴倒轉(zhuǎn)原則:高層模塊不應(yīng)該依賴低層模塊,它們都應(yīng)該依賴抽象。抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象。優(yōu)點:系統(tǒng)具有很好的靈活性,當(dāng)系統(tǒng)行為發(fā)生變化,只需要對抽象層進(jìn)行擴(kuò)展,在不修改的情況下來擴(kuò)展系統(tǒng)的功能。7.淺克隆與深克隆的區(qū)別淺克?。寒?dāng)原型對象被復(fù)制時,只復(fù)制它本身和其中包含的值類型的成員變量,而引用類型的成員變量并沒有復(fù)制;深克?。撼藢ο蟊旧肀粡?fù)制外,對象所包含的所有成員變量也將被復(fù)制;8.分析理解餓漢式和懶漢式單例的異同。共同點:餓漢式單例類和懶漢式單例類的構(gòu)造函

27、數(shù)都是私有的。餓漢式單例類:無須考慮多個線程同時訪問的問題;調(diào)用速度和反應(yīng)時間優(yōu)于懶漢式單例;資源利用效率不及懶漢式單例;系統(tǒng)加載時間可能會比較長懶漢式單例類:實現(xiàn)了延遲加載;必須處理好多個線程同時訪問的問題;需通過雙重檢查鎖定等機(jī)制進(jìn)行控制,將導(dǎo)致系統(tǒng)性能受到一定影響9.什么是雙重鎖定?為什么要進(jìn)行雙重鎖定,JAVA中如何實現(xiàn)雙重鎖定。 定義:是一種對單例對象創(chuàng)建進(jìn)行控制的雙重判斷機(jī)制。 目的:更好地對單例對象的創(chuàng)建進(jìn)行控制。實現(xiàn)過程:在雙重檢查鎖定中,當(dāng)實例不存在且同時有兩個線程調(diào)用Get Instance()方法時,它們都可以通過第一重“instance=null”判斷,如果此時不進(jìn)行“

28、instance=null”判斷,第二個線程并不知道實例已經(jīng)創(chuàng)建,將會創(chuàng)建新的實例,還會產(chǎn)生多個單例對象,違背了單例模式的設(shè)計思想。代碼題1. (簡單工廠模式)使用簡單工廠模式模擬女媧(Nvwa)造人(Person),如果向造人的工廠方法傳入?yún)?shù)“M”,則返回一個男人(Man)對象,如果傳入?yún)?shù)“W”則返回一個女人(Woman)對象,繪制相應(yīng)的類圖并使用JAVA語言模擬實現(xiàn)該場景。先需要增加一個新的機(jī)器人類,如果傳入?yún)?shù)“R”則返回一個機(jī)器人(Robot)對象,對代碼進(jìn)行修改并注意女媧類的變化。Person.javapublic interface Person public void per

29、sonmethod();Manperson.javapublic class ManPerson implements Personpublic void personmethod()System.out.println("男人");Woman.javapublic class WomanPerson implements Person public void personmethod()System.out.println("女人");Creator.javapublic class Creator public static Person creat

30、eperson(String type)Person person = null;if(type.equals("M")person = new ManPerson();else if(type.equals("W")person = new WomanPerson();return person;Client.javapublic class Client public static void main(String args) Person person;person = Creator.createperson("W"); pe

31、rson.personmethod();2. (簡單工廠方法)使用簡單工廠方法模式設(shè)計一個可以創(chuàng)建一個不同幾何形狀,如圓形、矩形、三角形等繪圖工具類,每個幾何圖形均具有繪制、擦除兩個方法,要求在繪制不支持的集合圖形時,拋出一個異常,繪制類圖并使用JAVA語言編程模擬實現(xiàn)。類似上面3. (工廠方法模式)寶馬(BMW)工廠制造寶馬汽車,奔馳(Benz)工廠制造奔馳汽車。使用工廠方法模式模擬場景,要求繪制相應(yīng)的類圖,并用JAVA語言編程模擬實現(xiàn)Creator.javapublic interface Creator public Product factory();BMWCreator.javapu

32、blic class BMWCreator implements Creatorpublic Product factory()return new BMWProduct();BenzCreator.javapublic class BenzCreator implements Creatorpublic Product factory()return new BenzProduct();Product.javapublic interface Product BenzProduct.javapublic class BenzProduct implements Productpublic v

33、oid BenzProduct()System.out.println("奔馳被創(chuàng)造");BMWProduct.javapublic class BMWProduct implements Productpublic void BMWProduct()System.out.println("寶馬被創(chuàng)造");Client.javapublic class Client public static Creator c1,c2;public static Product p1,p2;public static void main(String args) c1

34、 = new BenzCreator();p1 = c1.factory();c2 = new BenzCreator();p2 = c2.factory();4. (工廠方法模式)某數(shù)據(jù)統(tǒng)計系統(tǒng)中,曲線圖創(chuàng)建器生成曲線圖,柱狀圖創(chuàng)建器生成柱狀圖。試用工廠方法模式設(shè)計該系統(tǒng),要求繪制相應(yīng)的類圖,并用JAVA語言編程模擬實現(xiàn)。類似5. (原型模式)為某銷售系統(tǒng)設(shè)計一個客戶類Customer,在客戶類中包含一個名為客戶地址的成員變量,客戶地址的類型為Address,用淺克隆和深克隆分別實現(xiàn)Customer對象的復(fù)制,并比較兩種方式的異同。6. (單例模式)某軟件公司開發(fā)人員要創(chuàng)建一個數(shù)據(jù)庫連接池將

35、指定個數(shù)(如兩個或3個)數(shù)據(jù)庫連接對象存儲在連接池中,客戶端代碼可以從池中隨機(jī)取一個連接對象來連接數(shù)據(jù)庫,試通過對單例類進(jìn)行改造,設(shè)計一個能夠自行提供滴定個數(shù)實例對象的數(shù)據(jù)庫連接類并用JAVA語言編程模擬實現(xiàn)。7. (觀察者模式)“貓Cat大叫一聲,老鼠Mouse開始逃跑,主人Master被驚醒”。這個過程蘊(yùn)含了哪種設(shè)計模式?要求繪制相應(yīng)的類圖,并用JAVA語言編程模擬實現(xiàn)。8. (命令模式)房間中的開關(guān)就是命令模式的一個實現(xiàn),試用命令模式來模擬開關(guān)的功能,可控制對象包括電燈和電風(fēng)扇,繪制相應(yīng)的類圖并使用JAVA語言編程模擬。 AbstractCommand.javapublic abstra

36、ct class AbstractCommand public abstract void open(); public abstract void close(); Switch.javapublic class Switch private AbstractCommand abstractCommand; public void setComman(AbstractCommand abstractCommand) this.abstractCommand = abstractCommand; public void open() abstractCommand.open(); public

37、 void close() abstractCommand.close(); FunCommand.javapublic class FunCommand extends AbstractCommand private Fun fun = new Fun(); public void open() fun.open(); public void close() fun.close(); LightCommand.javapublic class LightCommand extends AbstractCommand private Light light = new Light(); pub

38、lic void open() light.open(); public void close() light.close(); Fun.javapublic class Fun public void open() System.out.println("開風(fēng)扇"); public void close() System.out.println("關(guān)風(fēng)扇"); Light.javapublic class Light public void open() System.out.println("開燈"); public void c

39、lose() System.out.println("關(guān)燈"); public class Client public static void main(String args) Switch s = new Switch(); AbstractCommand ac;ac = (AbstractCommand)XMLUtil.getBean(); s.setComman(ac); s.open(); s.close(); public class public class Client public static void main(String args) Switch

40、s = new Switch(); AbstractCommand ac;ac = (AbstractCommand)XMLUtil.getBean(); s.setComman(ac); s.open(); s.close(); public static void main(String args) Switch s = new Switch(); AbstractCommand ac;ac = (AbstractCommand)XMLUtil.getBean(); s.setComman(ac); s.open(); s.close(); 9. (代理模式)在一個論壇中已注冊用戶和游客的權(quán)限不同,已注冊的用戶擁有發(fā)帖、修改自己的注冊信息、修改自己的帖子等功能;而游客只能看到別人發(fā)的帖子,沒有其他權(quán)限。試用保護(hù)代理來設(shè)計該權(quán)限管理模塊AbstractPermission.javapublic interface AbstractPermission public void modifyUserInfo(); public void viewNote(); public void pulishNote(); public void modifyNote(); public void set

溫馨提示

  • 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

提交評論