




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- JJF 2187-2025半徑樣板校準(zhǔn)規(guī)范
- 2025至2030年中國(guó)丸鐵輸送機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 統(tǒng)編版三年級(jí)語(yǔ)文下冊(cè)第八單元達(dá)標(biāo)測(cè)試卷(含答案)
- 2025年《義務(wù)教育小學(xué)體育課程標(biāo)準(zhǔn)測(cè)試卷2022版》測(cè)試題庫(kù)及答案
- 2025年軍隊(duì)文職人員招聘之軍隊(duì)文職管理學(xué)題庫(kù)附答案(典型題)
- 2019-2025年消防設(shè)施操作員之消防設(shè)備中級(jí)技能過關(guān)檢測(cè)試卷A卷附答案
- 2024年遼寧省中考道德與法治試卷(含答案)
- 高等教育自學(xué)考試《00102世界市場(chǎng)行情》模擬試卷一
- 2024年廣東省公務(wù)員《申論(縣鎮(zhèn)級(jí))》試題真題及答案
- 2025年法制宣傳日普法知識(shí)競(jìng)賽題庫(kù)及答案(三)
- 廉政從業(yè)培訓(xùn)課件
- 2025新 公司法知識(shí)競(jìng)賽題庫(kù)與參考答案
- 2025年中國(guó)移動(dòng)通信集團(tuán)貴州限公司招聘高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 《苗圃生產(chǎn)與管理》教案-第三章 園林植物的播種育苗
- 大學(xué)生美甲創(chuàng)業(yè)項(xiàng)目路演
- 自控力-電子書
- 2025年中國(guó)中煤能源集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 《肺結(jié)節(jié)影像診斷》課件
- 2024年濰坊工程職業(yè)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- 山東黃河河務(wù)局公開招考2025高校畢業(yè)生高頻重點(diǎn)提升(共500題)附帶答案詳解
- 殯儀服務(wù)員職業(yè)技能鑒定考試題(附答案)
評(píng)論
0/150
提交評(píng)論