軟件設計模式與體系結(jié)構(gòu)_第1頁
軟件設計模式與體系結(jié)構(gòu)_第2頁
免費預覽已結(jié)束,剩余11頁可下載查看

下載本文檔

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

文檔簡介

1、計算機科學與技術學院軟件設計模式與體系結(jié)構(gòu)課程作業(yè)(一)(2016/2017學年第二學期)學生姓名:學生專業(yè):學生班級:學生學號:指導教師:雷君軟件工程1426010108王飛實驗一錯誤!未定義書簽。工廠方法模式汽車保險.抽象工廠方法模式房屋信息.錯誤!未定義書簽。錯誤!未定義書簽。實驗二錯誤!未定義書簽。組合模式空軍指揮系統(tǒng).適配器模式客戶信息驗證.錯誤!未定義書簽。.錯誤!未定義書簽。實驗三錯誤!未定義書簽。橋接模式幾何立體體積.訪問者模式計算機部件銷售軟件.錯誤!未定義書簽。錯誤!未定義書簽。實驗四錯誤!未定義書簽。策略模式整數(shù)排序.狀態(tài)模式交通信號燈.錯誤!未定義書簽。錯誤!未定義書簽

2、。實驗五錯誤!未定義書簽。MVC軟件體系結(jié)構(gòu)錯誤!未定義書簽。實驗工廠方法模式汽車保險【實驗內(nèi)容】在例的汽車保險管理應用程序?qū)嵗咸砑右粋€名為LuxuryCarInsurance的類,并且,該類要與其他的類一樣能執(zhí)行相應的功能?!咎砑哟a】1、添加LuxuryCarInsurance類:publicclassLuxuryCarInsuranceimplementsAutoInsuranceprivateStringdescription;publicStringgetInsuranceDescription()description="LuxuryCarInsurance:nnLux

3、uryCarInsurancecoveragepaysformedicalbills"+"lostwages,rehabilitation,treatmentand/or"+"funeralcostsforanyoneinjuredorkilled"+"byyourcar.Suchcoveragewillalsopayfor"+"painandsufferingdamageswhenathird"+"partysuccessfullysues."returndescription;2、

4、添加LuxuryCarPolicyProducer類:publicclassLuxuryCarPolicyProducerimplementsPolicyProducerpublicAutoInsurancegetPolicyObj();else("nCorrectformatofEmailAddr.");實驗結(jié)果】【實驗小結(jié)】通過適配器,客戶端可以調(diào)用同一接口,因而對客戶端來說是透明的。這樣做更簡單、更直接、更緊湊;復用了現(xiàn)存的類,解決了現(xiàn)存類和復用環(huán)境要求不一致的問題;將目標類和適配者類解耦,通過引入一個適配器類重用現(xiàn)有的適配者類,而無需修改原有代碼;-個對象適配器可以

5、把多個不同的適配者類適配到同一個目標,也就是說,同一個適配器可以把適配者類和它的子類都適配到目標接口。對于對象適配器來說,更換適配器的實現(xiàn)過程比較復雜。實驗三橋接模式幾何立體體積【實驗內(nèi)容】在例中的設計實驗層次類部分中,添加Ellipsoid(橢球)類,并且實現(xiàn)針對橢球體積的計算?!咎砑哟a】1、添加橢球類:publicclassEllipsoidimplementsGeoFormprivatedoubleaRadius;privatedoublebRadius;privatedoublecRadius;publicEllipsoid(doubleaRadius,doublebRadius,d

6、oublecRadius)=aRadius;=bRadius;=cRadius;publicdoublecomputeVolume()doublevolume=*aRadius*bRadius*cRadius;returnvolume;2、添加GUI:(1)privateJTextFieldtxtEllipsoidRadius_a;privateJTextFieldtxtEllipsoidRadius_b;privateJTextFieldtxtEllipsoidRadius_c;2) publicstaticfinalStringELLIPSOID="Ellipsoid"

7、3) (ELLIPSOID);4) elseif(ELLIPSOID)Stringa_radius=();Stringb_radius=();Stringc_radius=();doublea=(a_radius);doubleb=(b_radius);doublec=(c_radius);form=newEllipsoid(a,b,c);5) elseif(ELLIPSOID)displayNewGUI(getTypePanel(ELLIPSOID);6) elseif(ELLIPSOID)JLabellblRadius_a=newJLabel("InputRadiusa"

8、;);JLabellblRadius_b=newJLabel("InputRadiusb");JLabellblRadius_c=newJLabel("InputRadiusc");txtEllipsoidRadius_a=newJTextField(8);txtEllipsoidRadius_b=newJTextField(8);txtEllipsoidRadius_c=newJTextField(8);GridBagLayoutgridbag=newGridBagLayout();(gridbag);GridBagConstraintsgbc=new

9、GridBagConstraints();(lblRadius_a);(lblRadius_b);(lblRadius_c);(txtEllipsoidRadius_a);(txtEllipsoidRadius_b);(txtEllipsoidRadius_c);(lblMeasure);(cmbMeasure);=5;=5;=1;=8;=0;=0;(lblRadius_a,gbc);=1;=0;(txtEllipsoidRadius_a,gbc);=0;=1;(lblRadius_b,gbc);=1;=1;(txtEllipsoidRadius_b,gbc);=0;=2;(lblRadius

10、_c,gbc);=1;=2;(txtEllipsoidRadius_c,gbc);=0;=3;(lblMeasure,gbc);=1;=3;(cmbMeasure,gbc);實驗結(jié)果】實驗小結(jié)】通過這次實驗我們大概理解了橋接模式,通過關聯(lián)“抽象層次類”與“具體層次類”這一橋梁,將表示兩個維度的層類(數(shù)據(jù)結(jié)構(gòu))粘貼在一起,形成更大的數(shù)據(jù)結(jié)構(gòu),而這種變化又不會對現(xiàn)有的類產(chǎn)生影響,這種思路的終極想法是將軟件設計的抽象部分與實現(xiàn)部分分離,使它們都可以獨立的變化。訪問者模式計算機部件銷售軟件【實驗內(nèi)容】在例的設計中添加一個類SoundBox該類實現(xiàn)接口ComputerParts,并且其他的計算機部件的類

11、的結(jié)構(gòu)類似?!咎砑哟a】1添加SoundBox類:publicclassSoundBoximplementsComputerPartspublicstaticfinalStringNAME="SoundBox"privatefinaldoublePRICE=;publicstaticfinalStringFEATURES="SoundBox.X3K"publicStringgetName()returnNAME;publicdoublegetPrice()returnPRICE;publicStringgetDescription()returnFEAT

12、URES;publicvoidaccept(Visitorv)"SoundBoxhasbeenvisited.");(this);2、添加GUI:(1)StringcompParts="Case","Motherboard","Microprocessor","Memory","DriveController","VideoCard","Fan","PowerSupply","HardDiskDrive&q

13、uot;,"CDDrive","DVDDevice","Monitor","Keyboard","Mouse","SoundBox","Assembly","WholePC"(2)for(intk=11;k<17;k+)add(0,k,cPartsk);(3)elseif(source=cParts14)states14=state;elseif(source=cParts15)if(state=SELECTED)cParts1.

14、setSelected(true);cParts8.setSelected(true);elseif(state=DESELECTED)cParts1.setSelected(false);cParts8.setSelected(false);states15=state;elseif(source=cParts16)if(state=SELECTED)cParts0.setSelected(true);for(intk=11;k<15;k+)cPartsk.setSelected(true);elseif(state=DESELECTED)cParts0.setSelected(fal

15、se);for(intk=11;k<15;k+)cPartsk.setSelected(false);states16=state;(4)elseif(m=14)&&(states14=SELECTED)part=newSoundBox();("SoundBox");3、添加Visitor:publicabstractvoidvisitSoundBox(SoundBoxe);4、添加PriceVisitor:publicvoidvisitSoundBox(SoundBoxe)price=();(newDouble(price);total+=price

16、;5、添加PartsInfoVisitor:publicvoidvisitSoundBox(SoundBoxe)partInfo=();allOders=allOders+"n"+partInfo;實驗結(jié)果】【實驗小結(jié)】通過此次實驗讓我們更加深刻的理解了訪問者模式,它在處理數(shù)據(jù)結(jié)構(gòu)較穩(wěn)定,但是作用于其上的操作需要經(jīng)常變化的問題時時非常有效的,因此可以在不改變該結(jié)構(gòu)體中的類的基礎上定義一個新的操作,這個實驗就是如此,我們只需要添加新的類,然后調(diào)用accept(pv)方法就可以。實驗四策略模式整數(shù)排序【實驗內(nèi)容】在例的設計中的排序策略部分,添加一個類BidirectionaBu

17、bbleSort,進行“雙向冒泡法排序”,以便擴展該排序系統(tǒng)的功能。為了實現(xiàn)擴展功能,需要相應地修改Context類與客戶圖形界面類StrategyGUI?!咎砑哟a】1、添加BidirBubbleSort類:publicclassBidirBubbleSortimplementsSortAlgorithmpublicintsort(intnums,Contextct)();intj;intlimit=;intst=-1;while(st<limit)booleanflipped=false;st+;limit-;for(j=st;j<limit;j+)if(numsj>nu

18、msj+1)intT=numsj;numsj=numsj+1;numsj+1=T;flipped=true;if(!flipped)();returnnums;for(j=limit;-j>=st;)if(numsj>numsj+1)intT=numsj;numsj=numsj+1;numsj+1=T;flipped=true;if(!flipped)();returnnums;();returnnums;2、添加GUI:(1)publicstaticfinalStringBidirBubble="BidirBubbleSort"(2)(BidirBubble)

19、;(3)if(BidirBubble)sa=newBidirBubbleSort();實驗結(jié)果】【實驗小結(jié)】通過此次實驗讓我們更加理解了策略模式的優(yōu)勢,實現(xiàn)了高內(nèi)聚低耦合,它的應用場景是當有多個僅在行為上不同但是相關的類存在時,采用策略模式提供一個為一個類配置多種行為之一的方法。此時增加雙向冒泡排序法時,不需要修改Context類的代碼,只需要修改客戶類(StrategyGUI)。狀態(tài)模式交通信號燈實驗內(nèi)容】在例的設計中的交通信號燈狀態(tài)部分,添加一個類BlueLightT黃T藍T紅的狀態(tài)變化,以便擴展該交通信號燈系統(tǒng)的狀態(tài)?!咎砑哟a】1、添加BlueLight類:importpubliccl

20、assBlueLightextendsTrafficLightpublicBlueLight()state=BLUE;publicColorsetColor()return;publicvoidperformTask()();();changeState();publicvoidchangeState()state=RED;TrafficLightstateObj=newRedLight();(stateObj);2、添加TrafficLight:protectedfinalStringBLUE="Blue"3、添加YellowLight:state=BLUE;TrafficLightstateObj=newBlueLight();實驗結(jié)果】實驗小結(jié)】通過此次實驗讓我們理解了策略模式和狀態(tài)模式的區(qū)別與聯(lián)系,聯(lián)系是將控制狀態(tài)變化的類單獨分裝在一個類中,把它們獨立出來,不要和那些不需要變化的代碼混合在一起,這和策略模式相似。不同

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論