版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
哈爾濱工業(yè)大學(xué)華德應(yīng)用技術(shù)學(xué)院實(shí)驗(yàn)報(bào)告課程名稱:軟件設(shè)計(jì)模式系別:計(jì)算機(jī)應(yīng)用技術(shù)系專業(yè):軟件工程學(xué)號(hào):1099111130姓名:陳天任學(xué)期:2012年春季學(xué)期實(shí)驗(yàn)成績:計(jì)算機(jī)應(yīng)用技術(shù)系監(jiān)制實(shí)驗(yàn)名稱一:單例模式實(shí)驗(yàn)時(shí)間:2012.4.21學(xué)時(shí):2實(shí)驗(yàn)地點(diǎn):s203實(shí)驗(yàn)?zāi)康模赫莆震I式單例、懶式單例模式的基本實(shí)現(xiàn)形式,并體會(huì)兩種實(shí)現(xiàn)方式的特點(diǎn)。掌握單例模式的基本應(yīng)用。實(shí)驗(yàn)步驟:在項(xiàng)目的開發(fā)過程中,經(jīng)常需要讀取配置文件,根據(jù)配置文件的參數(shù)決定具體的軟件業(yè)務(wù)邏輯。ReadConfig.java程序?qū)嵗龑?shí)現(xiàn)了從配置文件”zzr.ini”文件中讀取data#數(shù)值的功能。zzr.ini文件內(nèi)容如下:data=123456789importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStream;importjava.util.Properties;publicclassReadConfig(privateStringparamA;publicReadConfig()(Propertiesp=newProperties();try(p.load(newFileInputStream("zzr.txt"));this.paramA=p.getProperty("data");}catch(FileNotFoundExceptione)(e.printStackTrace();}catch(IOExceptione)(e.printStackTrace();}}publicStringgetParamA()(returnparamA;}publicvoidsetParamA(StringparamA)(this.paramA=paramA;}publicstaticvoidmain(Stringargs[])(ReadConfigrc=newReadConfig();System.out.println("配置文件的值為:"+rc.getParamA());}}1、運(yùn)行如上程序?qū)懗鲞\(yùn)行結(jié)果配置文件的值為:1234567892、如上程序,參照J(rèn)DK幫助文檔,逐行寫出注釋。importjava.io.*;//弓|入IO包importjava.util.Properties;//引入util包的Properties類publicclassReadConfig//創(chuàng)建ReadConfig類(privateStringparamA;//定義個(gè)私有的字符串publicReadConfig()//第一構(gòu)造方法(Propertiesp=newProperties();//new一個(gè)Propertier類的實(shí)例try//抓文件不存在和io異常(p.load(newFileInputStream("d:/zzr.ini"));//創(chuàng)建連接文件的流this.paramA=p.getProperty("data");//設(shè)置paramA的值等于文件中的DATA的屬性}catch(FileNotFoundExceptione)//處理異常(e.printStackTrace();//在控制臺(tái)顯示異常,給開發(fā)者看的}catch(IOExceptione)(e.printStackTrace();}}publicStringgetParamA()//定義一個(gè)方法返回字符串類型的paramA的值(returnparamA;}publicvoidsetParamA(StringparamA)//定義一個(gè)方法設(shè)置paramA的值(this.paramA=paramA;}publicstaticvoidmain(Stringargs[])//main主方法(ReadConfigrc=newReadConfig();//實(shí)例化ReadConfig一個(gè)實(shí)例System.out.println("配置文件的值為:"+rc.getParamA());//輸出paramA的值}}3、在程序中,通過newReadConfig();來得到配置文件的內(nèi)容。在一個(gè)項(xiàng)目中,有可能多處使用配置文件,就需要我們多次進(jìn)行new操作。每一次的new都是一次讀取外部文件的過程,然后將讀取到得的參數(shù)值,放到內(nèi)存中。這樣勢必會(huì)造成系統(tǒng)資源的浪費(fèi)。把如上問題總結(jié)一下:能不能再系統(tǒng)運(yùn)行的過程中,控制某個(gè)類僅有一個(gè)實(shí)例。importjava.io.*;importjava.util.Properties;publicclassReadConfig(privatestaticStringparamA=null;privatestaticReadConfigrc=null;privateReadConfig()(Propertiesp=newProperties();try(p.load(newFileInputStream("d:/zzr.ini"));paramA=p.getProperty("data");}catch(FileNotFoundExceptione)(e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}publicstaticsynchronizedReadConfiggetIntance(){if(rc==null){rc=newReadConfig();}returnrc;}publicStringgetParamA(){returnparamA;}publicstaticvoidmain(Stringargs[]){ReadConfigfq=ReadConfig.getIntance();System.out.println("配置文件的值為:"+fq.getParamA());}}實(shí)驗(yàn)總結(jié):通過實(shí)驗(yàn)對(duì)單例模式有了深刻的理解。知道了單例模式具體兩種的的使用方法和何時(shí)使用單例模式等。
實(shí)驗(yàn)名稱二:簡單工廠模式實(shí)驗(yàn)時(shí)間:2012.4.21學(xué)時(shí):2實(shí)驗(yàn)地點(diǎn):s203實(shí)驗(yàn)?zāi)康模赫莆蘸唵喂S模式的基本實(shí)現(xiàn)形式。體會(huì)單工廠模式的特點(diǎn)。掌握單工廠模式的基本應(yīng)用。實(shí)驗(yàn)步驟:一……KQ一…-^lUserDAOa-::—NewClass3'?-、/'■--■:ri:imUseCaseViHi.ii.ij■--碎Lfactory1MSServerUserDAOlUserDAO.javapublicinterfacelUserDAO(voidgetUserByID(intid);}MSServerDAO.javapublicclassMSServerUserDAOimplementslUserDAO(publicvoidgetUserByID(intid)(System.out.println("ID:"+id);}}Factory.javapublicclassfactory(publicstaticlUserDAOcreateISD(inta)(lUserDAOuser=null;if(a==1)(user=newMSServerUserDAO();}returnuser;}}Zzr.javapublicclasszzr(publicstaticvoidmain(String[]args)(lUserDAOfq=factory.createlSD(1);fq.getUserByID(7);}}3.3擴(kuò)展lUserDAO接口實(shí)現(xiàn)---->MySqlUserDAO,并且完成客戶端,對(duì)擴(kuò)展功能的調(diào)用。lUserDAO.javapublicinterfaceIUserDAO(voidgetUserByID(intid);}MSServerDAO.javapublicclassMSServerUserDAOimplementsIUserDAO(publicvoidgetUserByID(intid)(System.out.println("MSServerDAOID:"+id);}}MySqlUserDAO.javapublicclassMySqlUserDAOimplementsIUserDAO(publicvoidgetUserByID(intid)(System.out.println("MySqlUserDAOID:"+id);}}Factory.javapublicclassfactory(publicstaticIUserDAOcreateISD(inta)(IUserDAOuser=null;if(a==1)(user=newMSServerUserDAO();}returnuser;}}Zzr.javapublicclasszzr(publicstaticvoidmain(String[]args)(IUserDAOfq=factory.createlSD(1);fq.getUserByID(7);}}實(shí)驗(yàn)總結(jié):通過實(shí)驗(yàn)的學(xué)習(xí)知道何時(shí)應(yīng)用簡單工廠模式和使用簡單工廠帶來的好處。
實(shí)驗(yàn)名稱三:工廠方法模式實(shí)驗(yàn)時(shí)間:2012.5.7學(xué)時(shí):2實(shí)驗(yàn)地點(diǎn):實(shí)驗(yàn)?zāi)康模赫莆展S方法模式的基本實(shí)現(xiàn)形式,體會(huì)工廠方法模式的特點(diǎn),掌握工廠方法模式的基本應(yīng)用。實(shí)驗(yàn)步驟:實(shí)現(xiàn)一個(gè)導(dǎo)出數(shù)據(jù)的框架,來讓用戶選擇數(shù)據(jù)的導(dǎo)出方式,要求導(dǎo)出的數(shù)據(jù)格式:xml,txt。具體的導(dǎo)出方法只提供示意實(shí)現(xiàn)即可,重點(diǎn)體會(huì)框架的總體設(shè)計(jì)。publicinterfaceSend(voidsend();}publicclassXMLSendimplementsSend(publicvoidsend()(System.out.println("XML導(dǎo)出");}}publicclassTXTSendimplementsSend(publicvoidsend()(System.out.println("TXT導(dǎo)出");}}publicabstractclassSendFactory(publicabstractSendfactoryMethod();publicvoidgetFactoryMethod()(factoryMethod().send();}}publicclassXMLFactoryextendsSendFactory(publicSendfactoryMethod()(returnnewXMLSend();}}publicclassTXTFactoryextendsSendFactory(publicSendfactoryMethod()(returnnewTXTSend();}}publicclassFanqiang(publicstaticvoidmain(String[]args)(SendFactoryzzr=newTXTFactory();zzr.getFactoryMethod();}}3.4用戶對(duì)于此框架,提出了新的需求,要求可以導(dǎo)出數(shù)據(jù)庫格式的數(shù)據(jù)文件。publicinterfaceSend(voidsend();}publicclassXMLSendimplementsSend(publicvoidsend()(System.out.println("XML導(dǎo)出");}}publicclassTXTSendimplementsSend(publicvoidsend()(System.out.println("TXT導(dǎo)出");}}publicclassSQLSendimplementsSend(publicvoidsend()(System.out.println("SQL導(dǎo)出");}}publicabstractclassSendFactory(publicabstractSendfactoryMethod();publicvoidgetFactoryMethod()(factoryMethod().send();}}publicclassXMLFactoryextendsSendFactory(publicSendfactoryMethod()(returnnewXMLSend();}}publicclassTXTFactoryextendsSendFactory(publicSendfactoryMethod()(returnnewTXTSend();}}publicclassSQLFactoryextendsSendFactory(publicSendfactoryMethod()(returnnewSQLSend();}}publicclassFanqiang(publicstaticvoidmain(String[]args)(SendFactoryzzr=newTXTFactory();zzr.getFactoryMethod();}}實(shí)驗(yàn)總結(jié):學(xué)習(xí)了工廠方法模式,經(jīng)過實(shí)驗(yàn)了解工廠方法的優(yōu)點(diǎn)和缺點(diǎn)以及和簡單工廠的區(qū)別。
實(shí)驗(yàn)名稱四:抽象工廠模式實(shí)驗(yàn)時(shí)間:2012.5.7學(xué)時(shí):2實(shí)驗(yàn)地點(diǎn):s203實(shí)驗(yàn)?zāi)康模赫莆粘橄蠊S模式的基本實(shí)現(xiàn)形式。的基本應(yīng)用。體會(huì)抽象工廠模式的特點(diǎn)。掌握抽象工廠模式實(shí)驗(yàn)步驟:抽竦工廠geti^QgetCPUQinstallCPU();void}publicclass入]^。主板implements主板(publicvoidinstallCPU()(System.out.println("我是AMD主板");}}publicclassIntel主板implements抽竦工廠geti^QgetCPUQinstallCPU();void}publicclass入]^。主板implements主板(System.out.println("我是Intel主板");}}publicinterfaceCPU(voidrun();}publicclassIntelCPUimplementsCPU(publicvoidrun()(System.out.println("我是IntelCPU");}}publicclassAMDCPUimplementsCPU(publicvoidrun()(System.out.println("我是AMDCPU");}}publicinterface抽象工廠(主板get主板();CPUgetCPU();}publicclassAMDX廠implements抽象工廠(public主板get主板()(returnnewAMD主板();}publicCPUgetCPU()(returnnewAMDCPU();}}publicclassIntelX廠implements抽象工廠(public主板get主板()(returnnewIntel主板();}publicCPUgetCPU()(returnnewIntelCPU();}}publicclassFanqiang(publicstaticvoidmain(String[]args)(抽象工廠zzr=newIntelX廠();zzr.get主板().installCPU();zzr.getCPU().run();}}實(shí)驗(yàn)總結(jié):在實(shí)驗(yàn)中深刻的理解了抽象工廠方法模式,在具體應(yīng)用中比較了與前兩種模式的不同之處。實(shí)驗(yàn)名稱五:策略模式實(shí)驗(yàn)時(shí)間:2012.0515學(xué)時(shí):2實(shí)驗(yàn)地點(diǎn):s203實(shí)驗(yàn)?zāi)康模赫莆詹呗阅J降幕緦?shí)現(xiàn)形式。體會(huì)策略模式的特點(diǎn)。掌握策略模式的基本應(yīng)用。實(shí)驗(yàn)步驟:向客戶報(bào)價(jià),并不是一件容易的事情,需要考慮的因素特別多,就使得我們的程序需要考慮很多事情,比如客戶身份的不同,會(huì)影響到報(bào)價(jià)的結(jié)果。再比如客戶購買的物品數(shù)量和金額,同樣會(huì)對(duì)最后的報(bào)價(jià)有影響,此實(shí)例僅考慮如下需求:(1)對(duì)普通客戶或者是新客戶報(bào)全價(jià)。(2)對(duì)老客戶報(bào)的價(jià)格,統(tǒng)一折扣5%(3)對(duì)大客戶報(bào)的價(jià)格,統(tǒng)一折扣10%3.2報(bào)價(jià)管理框架類圖:普通用戶|老客戶||大客戶|⑴策略publicinterface策略{publicdouble計(jì)算報(bào)價(jià)(doubleprice);}普通用戶publicclass普通用戶implements策略{publicdouble計(jì)算報(bào)價(jià)(doubleprice){System.out.println("對(duì)于普通客戶,沒有折扣");returnprice;}}老客戶publicclass老客戶implements策略{publicdouble計(jì)算報(bào)價(jià)(doubleprice){System.out.println("對(duì)于老客戶,統(tǒng)一折扣5%");returnprice*(1-0.05);}}大客戶publicclass大客戶implements策略(publicdouble計(jì)算報(bào)價(jià)(doubleprice)(System.out.println("對(duì)于老客戶,統(tǒng)一折扣10%");returnprice*(1-0.1);}}報(bào)價(jià)publicclass才艮價(jià)(private策略strategy=null;public報(bào)價(jià)(策略strategy)(this.strategy=strategy;}publicdouble獲得價(jià)格(doubleprice)(returnthis.strategy.計(jì)算報(bào)價(jià)(price);}}Client客戶端publicclassClient(publicstaticvoidmain(String[]args)(策略strategy=new大客戶();報(bào)價(jià)ctx=new報(bào)價(jià)(strategy);doublequote=ctx.獲得價(jià)格(1000);System.out.println("向客戶報(bào)價(jià):"+quote);}}3.4、用戶需求發(fā)生變化:除了上述的普通用戶、老用戶和大客戶。又多了一類ZZR客戶,這類客戶統(tǒng)一折扣95%。請(qǐng)完善此應(yīng)用擴(kuò)展,完善代碼。publicclassZZRimplements策略{publicdouble計(jì)算報(bào)價(jià)(doubleprice){System.out.println("對(duì)于ZZR這樣的客戶,統(tǒng)一打95折”);returnprice*0.95;}}publicclassClient{publicstaticvoidmain(String[]args){策略strategy=newZZR();報(bào)價(jià)ctx=new報(bào)價(jià)(strategy);doublequote=ctx.獲得價(jià)格(1000);System.out.println("向客戶報(bào)價(jià):"+quote);}}實(shí)驗(yàn)總結(jié):通過實(shí)驗(yàn)掌握了策略模式和策略模式的拓展。也了解了應(yīng)用策略模式的具體情況。實(shí)驗(yàn)名稱六:模板方法模式實(shí)驗(yàn)時(shí)間:實(shí)驗(yàn)時(shí)間:2012.05.15學(xué)時(shí):2實(shí)驗(yàn)地點(diǎn):s206實(shí)驗(yàn)?zāi)康模赫莆漳0宸椒J降幕緦?shí)現(xiàn)形式,體會(huì)模板方法模式的特點(diǎn),掌握模板方法模式的基本應(yīng)用。實(shí)驗(yàn)步驟:publicabstractclass喝水模型(publicabstractvoid侄【」水();publicabstractvoid說話();publicabstractvoid撞杯();publicabstractvoid喝();publicbooleanff()(returntrue;}publicvoid喝水()(this.倒水();this.說話();if(ff())this.撞杯();this.喝();}}publicclass軟工extends喝水模型{publicvoid倒水(){System.out.println("rd");}publicvoid喝(){System.out.println("rh");}publicvoid撞杯(){System.out.println("rz");}publicvoid說話(){System.out.println("rs");}publicbooleanff(){returnfalse;}}publicclass客戶端{(lán)publicstaticvoidmain(String[]args){喝水模型m=new軟工();m.喝水();}}實(shí)驗(yàn)總結(jié):通過實(shí)驗(yàn)掌握了模板方法模式。學(xué)習(xí)了鉤子方法以及如何繪制UML圖,也輔助復(fù)習(xí)了UMLo實(shí)驗(yàn)名稱七:原型模式實(shí)驗(yàn)時(shí)間:實(shí)驗(yàn)時(shí)間:2012.05.21學(xué)時(shí):4實(shí)驗(yàn)地點(diǎn):s203實(shí)驗(yàn)?zāi)康模赫莆赵湍J降幕緦?shí)現(xiàn)形式,體會(huì)原型模式的特點(diǎn),掌握原型模式的基本應(yīng)用。實(shí)驗(yàn)步驟:Book類;publicclassBookimplementsCloneable(privateStringname;private
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 化學(xué)鍍銀工操作安全模擬考核試卷含答案
- 塑料模具工創(chuàng)新思維能力考核試卷含答案
- 工程船舶水手操作管理競賽考核試卷含答案
- 多孔硝酸銨造粒工安全文明測試考核試卷含答案
- 絕緣防爆工具制作工崗前技術(shù)改進(jìn)考核試卷含答案
- 五年級(jí)感冒咳嗽請(qǐng)假條
- 2025年呼吸制氧項(xiàng)目發(fā)展計(jì)劃
- 2025年地震數(shù)字遙測接收機(jī)合作協(xié)議書
- 2026年數(shù)字孿生水務(wù)系統(tǒng)項(xiàng)目營銷方案
- 2025年陜西省中考地理真題卷含答案解析
- 不良資產(chǎn)合作戰(zhàn)略框架協(xié)議文本
- 2025年鹽城中考?xì)v史試卷及答案
- 2026年孝昌縣供水有限公司公開招聘正式員工備考題庫完整參考答案詳解
- 2025年鄭州工業(yè)應(yīng)用技術(shù)學(xué)院馬克思主義基本原理概論期末考試模擬試卷
- 測繪資料檔案匯交制度
- 2025年六年級(jí)上冊(cè)道德與法治期末測試卷附答案(完整版)
- IPC7711C7721C-2017(CN)電子組件的返工修改和維修(完整版)
- 呂國泰《電子技術(shù)》
- 哈薩克族主要部落及其歷史
- 2015比賽練習(xí)任務(wù)指導(dǎo)書
- 人教版七年級(jí)語文上冊(cè)期末專題復(fù)習(xí)文言文訓(xùn)練及答案
評(píng)論
0/150
提交評(píng)論