2014年設(shè)計(jì)模式考試題_第1頁(yè)
2014年設(shè)計(jì)模式考試題_第2頁(yè)
2014年設(shè)計(jì)模式考試題_第3頁(yè)
2014年設(shè)計(jì)模式考試題_第4頁(yè)
2014年設(shè)計(jì)模式考試題_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

2014年設(shè)計(jì)模式考試題設(shè)計(jì)一個(gè)程序來(lái)讀取多種不同存儲(chǔ)格式的圖片,針對(duì)每一種圖片格式都設(shè)計(jì)一個(gè)圖片讀取器(ImageReader),如GIF格式圖片讀取器(GifReader)用于讀取GIF格式的圖片,JPEG格式圖片讀取器(JpegReader)用于讀取JPEG格式的圖片,Tiff格式圖片讀取器(TiffReader)用于讀取Tiff格式的圖片。圖片讀取器對(duì)象通過圖片讀取器工廠(ImageReaderFactory)來(lái)創(chuàng)建,ImageReaderFactory是「-個(gè)抽象類,用于定義創(chuàng)建圖片讀取器的工廠方法,其子類GifReaderFactory、JpegReaderFactory和TiffReaderFactory用于創(chuàng)建具體的圖片讀取器對(duì)象。請(qǐng)使用工廠方法模式實(shí)現(xiàn)該程序的設(shè)計(jì),并使用UML畫出該模式的類圖。ImageReadFactoryFactory:void+read()+finish():void:void+read()+finish()JpegReadFactoryGifReadFactoryTiffReadFactory+read()+finish():void:void+read()+finish()packagecom;publicinterfaceImageReaderFactory(//讀取publicvoidread();//完成publicvoidfinish();}publicclassJpegReaderFactoryimplementsImageReaderFactory{publicvoidread(){ImageReadFactoryFactory:void+read()+finish():void:void+read()+finish()JpegReadFactoryGifReadFactoryTiffReadFactory+read()+finish():void:void+read()+finish()}publicvoidfinish()(System.out.println("JPEG圖片讀取完成");}}publicclassGifReaderFactoryimplementsImageReaderFactory{publicvoidread(){System.out.println("讀取GIF圖片中");}publicvoidfinish(){System.out.println("GIF圖片讀取完成");}}publicclassTiffReaderFactoryimplementsImageReaderFactory{publicvoidread(){System.out.println("讀取TIFF圖片中");}publicvoidfinish(){System.out.println("TIFF圖片讀取完成");}}classFactory{publicstaticImageReaderFactorygetImageReaderInstance(Stringtype){ImageReaderFactoryf=null;if("Jpeg".equals(type)){f=newJpegReaderFactory();}if("Tiff".equals(type)){f=newTiffReaderFactory();}if("Gif".equals(type)){f=newGifReaderFactory();if("jpeg".equals(type))(f=newJpegReaderFactory();}if("tiff".equals(type))(f=newTiffReaderFactory();}if("gif".equals(type))(f=newGifReaderFactory();}returnf;}};publicclassImageReaderClient(publicstaticvoidmain(String[]args)(if(args.length==0)(System.out.println("請(qǐng)輸入需要讀取的圖片類型");/*System.exit(1);*/}ImageReaderFactoryf=Factory.getImageReaderInstance(args[0]);/*ImageReaderFactoryf=Factory.getImageReaderInstance("gif");*/if(f!=null)(f.read();f.finish();}else(System.out.println("不支持該類型圖片。");實(shí)現(xiàn)一個(gè)雙向適配器實(shí)例,使得貓(Cat)可以學(xué)狗(Dog)叫,狗可以學(xué)貓抓老鼠。請(qǐng)使用UML畫出相應(yīng)類圖并給出編程設(shè)計(jì)代碼。packagecom;publicinterfaceIcat(//貓的外表publicvoidcatLooks();//貓捉老鼠publicvoidzhuoshu();}publicinterfaceIdog(〃狗的外表publicvoiddogLooks();//狗叫publicvoidbark();}publicclassArealCatimplementsIcat(publicvoidcatLooks()(System.out.println("Iamarealcat,IhaveacatLooks.");};//狗叫publicvoidzhuoshu()(System.out.println("Iamarealcat,Icancatchamouse.");};}publicclassArealDogimplementsIdog(//狗的外表publicvoiddogLooks(){System.out.println("Iamarealdog,IhaveadogLooks.");};//狗叫publicvoidbark(){System.out.println("Iamarealdog,Icanbark.");};}publicclassATwoFaceadapterimplementsIdog,Icat{Icatcat=null;publicATwoFaceadapter(Icatcat){this.cat=cat;}publicvoiddogLooks(){//假裝自己是一條狗Systemout.println("Iamadog,too!");//隱藏自己的外貌//cat.catLooks();}publicvoidbark(){cat.zhuoshu();}Idogdog=null;publicATwoFaceadapter(Idogdog){this.dog=dog;}publicvoidcatLooks(){//假裝自己是一只貓Systemout.println("Iamacat,too.");//隱藏自己的外貌//dog.dogLooks();}publicvoidzhuoshu()(dog.bark();}}publicclassMain(publicstaticvoidmain(String[]args)(//把一條狗適配成一只貓IcatAFakeCat=newATwoFaceadapter(newArealDog());AFakeCat.catLooks();AFakeCat.zhuoshu();//把一只貓適配成一條狗IdogAFakeDog=newATwoFaceadapter(newArealCat());AFakeDog.dogLooks();AFakeDog.bark();}某銀行軟件的利息計(jì)算流程如下:系統(tǒng)根據(jù)賬戶查詢用戶信息;根據(jù)用戶信息判斷用戶類型;不同類型的用戶使用不同的利息計(jì)算方式計(jì)算利息(如活期賬戶CurrentAccount和定期賬戶SavingAccount具有不同的利息計(jì)算方式);顯示利息。請(qǐng)使用模板方法模式來(lái)設(shè)計(jì)該系統(tǒng),繪制UML類圖并給出編程設(shè)計(jì)代碼。AbstractClass{abstract}TOC\o"1-5"\h\z+findUserType():vod+findInterest():vod+findTotal():vod+userAccount():vodfindUserType();l2ATVfindInterest();TfindTotal();CurrentAccountSavingAccount+findUserType():vod+findUserType():vod+findInterest():vod+findInterest():vod+findTotal():vod+findTotal():vodpackagecom;publicabstractclassAbstractclass(//定義一個(gè)模板方法來(lái)控制用戶帳戶查詢的流程publicvoiduserAccount(){//TemplateMethod//首先生產(chǎn)手機(jī)體(模板方法自己完成)Systemout.println("查詢用戶帳戶信息");this.findUserType();this.findInterest();this.findTotal();Systemout.println("查詢完畢!");//以上模板已經(jīng)規(guī)定好了}〃定義抽象的方法(不同類型的帳戶)protectedabstractvoidfindUserType();〃定義抽象的方法(不同利率)protectedabstractvoidfindInterest();〃定義抽象的方法(不同利息)protectedabstractvoidfindTotal();}publicclassCurrentAccountextendsAbstractclass(protectedvoidfindUserType()(Systemout.println("該用戶為活期存款帳戶");}protectedvoidfindInterest()(Systemout.println("活期存款利率為0.35%");}protectedvoidfindTotal()(Systemout.println("該用戶存入1000元,年利息為3.5元");}}publicclassSavingAccountextendsAbstractClass(protectedvoidfindUserType()(Systemout.println("該用戶為定期存款帳戶");}protectedvoidfindInterest()(Systemout.println("定期存款利率為3.25%");}protectedvoidfindTotal()(Systemout.println("該用戶存入1000元,年利息為32.5元");}}publicclassMain(publicstaticvoidmain(Stringargs[])(AbstractClassac01=newCurrentAccount();//子類的對(duì)象付給父類ac01.userAccount()//查詢帳戶AbstractClassac02=newSavingAccount();//子類的對(duì)象付給父類ac02.userAccount()//查詢帳戶請(qǐng)查閱文獻(xiàn),并結(jié)合個(gè)人的學(xué)習(xí)和實(shí)踐體會(huì),舉例談?wù)勀銓?duì)設(shè)計(jì)模式的認(rèn)識(shí),以及某個(gè)特定的設(shè)計(jì)模式(自選)在面向?qū)ο蟪绦蛟O(shè)計(jì)中的重要作用。軟件開發(fā)過程中,一個(gè)系統(tǒng)的關(guān)鍵是設(shè)計(jì),如果系統(tǒng)設(shè)計(jì)的很好,那么在后續(xù)開發(fā)中就能少走彎路,并且在系統(tǒng)維護(hù)中,能夠簡(jiǎn)單、輕松。但如果系統(tǒng)設(shè)計(jì)中就出現(xiàn)了問題,那么這個(gè)系統(tǒng)的開發(fā)必然是痛苦的。所以人們把軟件開發(fā)過程中有價(jià)值的經(jīng)驗(yàn)進(jìn)行提煉和總結(jié),得到了很多的模式。這些模式很清晰的說明了它們所表達(dá)的關(guān)聯(lián)、問題和解決方式之間的關(guān)系。這些在軟件設(shè)計(jì)上積累、抽象出來(lái)的模式被稱之為設(shè)計(jì)模式。模式是一條規(guī)則,告訴你應(yīng)該如何創(chuàng)建一個(gè)實(shí)物、應(yīng)該在何時(shí)創(chuàng)建。它既是過程,也是實(shí)物;既是對(duì)當(dāng)前實(shí)物的描述,也是對(duì)創(chuàng)建實(shí)物的過程的描述。本學(xué)期共學(xué)習(xí)了二十三個(gè)模式,這些模式可以分成三類,創(chuàng)建型模式、結(jié)構(gòu)性模式和行為模式。各類模式都是在不同場(chǎng)景下,解決不同問題的方案。下面具體談?wù)勑袨槟J剑盒袨槟J缴婕暗剿惴ê蛯?duì)象間職責(zé)的分配。行為模式不僅描述對(duì)象或類的模式,還描述它們之間的通信模式。這些模式刻畫了在運(yùn)行時(shí)難以跟蹤的復(fù)雜的控制流。它們將你的注意力從控制流轉(zhuǎn)移到對(duì)象間的聯(lián)系方式上來(lái)。行為類模式使用繼承機(jī)制在類間分派行為。行為對(duì)象模式使用對(duì)象復(fù)合而不是繼承。一些行為對(duì)象模式描述了一組對(duì)等的對(duì)象怎樣相互協(xié)作以完成其中任一個(gè)對(duì)象都無(wú)法單獨(dú)完成的任務(wù)。狀態(tài)模式(StatePattern)屬于行為模式的一種。狀態(tài)模式的定義:當(dāng)一個(gè)對(duì)象的內(nèi)在狀態(tài)改變時(shí)允許改變其行為,這個(gè)對(duì)象看起來(lái)像是改變了其類。狀態(tài)模式主要解決的是當(dāng)控制一個(gè)對(duì)象狀態(tài)的條件表達(dá)式過于復(fù)雜時(shí)的情況。把狀態(tài)的判斷邏輯轉(zhuǎn)移到表示不同狀態(tài)的一系列類中,可以把復(fù)雜的判斷邏輯簡(jiǎn)化。狀態(tài)模式適用于下面的場(chǎng)景一個(gè)對(duì)象的行為取決于它的狀態(tài),并且它必須在運(yùn)行時(shí)刻根據(jù)狀態(tài)改變它的行為。一個(gè)操作中含有龐大的多分支結(jié)構(gòu),并且這些分支決定于對(duì)象的狀態(tài)。狀態(tài)模式將與特定狀態(tài)相關(guān)的行為局部化,并且將不同的狀態(tài)行為分割開來(lái),也就是將特定狀態(tài)的相關(guān)行為都放在一個(gè)對(duì)象中,由于所有與狀態(tài)相關(guān)的代碼都存在

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論