版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 計算機科學(xué)與技術(shù)學(xué)院軟件設(shè)計模式與體系結(jié)構(gòu)課程作業(yè)(一) (2016/2017學(xué)年 第二學(xué)期)學(xué)生姓名: 雷 君學(xué)生專業(yè): 軟件工程學(xué)生班級: 學(xué)生學(xué)號: 8指導(dǎo)教師: 王 飛 目 錄實驗一1工廠方法模式汽車保險1抽象工廠方法模式房屋信息3實驗二6組合模式空軍指揮系統(tǒng)6適配器模式客戶信息驗證8實驗三11橋接模式幾何立體體積11訪問者模式計算機部件銷售軟件14實驗四17策略模式整數(shù)排序17狀態(tài)模式交通信號燈19實驗五21MVC軟件體系結(jié)構(gòu)21實驗一工廠方法模式汽車保險【實驗內(nèi)容】 在例2.3的汽車保險管理應(yīng)用程序?qū)嵗咸砑右粋€名為LuxuryCarInsurance的類,并且,該類要與其他的類
2、一樣能執(zhí)行相應(yīng)的功能。【添加代碼】1、 添加LuxuryCarInsurance類: public class LuxuryCarInsurance implements AutoInsurance private String description; public String getInsuranceDescription() description = LuxuryCarInsurance: nnLuxuryCarInsurance coverage pays for medical bills + lost wages, rehabilitation, treatment and/o
3、r + funeral costs for anyone injured or killed + by your car. Such coverage will also pay for + pain and suffering damages when a third + party successfully sues. ; return description; 2、 添加LuxuryCarPolicyProducer類: public class LuxuryCarPolicyProducer implements PolicyProducer public AutoInsurance
4、getPolicyObj() /Fruit factory() return new LuxuryCarInsurance(); 3、 添加GUI: (1)public static final String LUXURYCAR = LuxuryCar Insurance; (2)cmbInsuranceType.addItem(LUXURYCAR); (3)if (type.equals(LUXURYCAR) pp=new LuxuryCarPolicyProducer(); 【實驗結(jié)果】 【實驗小結(jié)】使用工廠方法訪問并且初始化合適的類的對象,簡化了應(yīng)用程序,應(yīng)用程序本身不再含有大量的條件語
5、句判定何時選取哪個類。其次,工廠方法實現(xiàn)了一些特殊的某個類的機制,尤其是層次結(jié)構(gòu)不同的類需要不同的初始化方法的時候。抽象工廠方法模式房屋信息【實驗內(nèi)容】 在例2.4中設(shè)計并且實現(xiàn)了豪華(Super)和中等(Medum)別墅(House)和公寓(Condo)的查詢。要求在該設(shè)計的基礎(chǔ)上,增加一個新的類SemiDetacher(半獨立式樓宇),并且編寫代碼實現(xiàn)相應(yīng)的查詢功能?!咎砑哟a】1、添加SemiDetacher類: public interface SemiDetacher public String getSemiDetacherInfo(); public String getSemi
6、DetacherFeatures(); 2、 添加SuperSemiDetacher類: public class SuperSemiDetacher implements SemiDetacher private String name; public SuperSemiDetacher(String cName) name = cName; public String getSemiDetacherInfo() return superSemiDetacher.html; public String getSemiDetacherFeatures() return Super SemiDe
7、tacher ; 3、添加MediumSemiDetacher類: public class MediumSemiDetacher implements SemiDetacher private String name; public MediumSemiDetacher(String cName) name = cName; public String getSemiDetacherInfo() return MediumSemiDetacher.html; public String getSemiDetacherFeatures()return Medium SemiDetacher ;
8、 4、 添加BuildingFactory: public abstract SemiDetacher getSemiDetacher();5、添加MediumBuildingFactory: public SemiDetacher getSemiDetacher() return new MediumSemiDetacher(Medium SemiDetacher); 6、 添加SuperBuildingFactory: public SemiDetacher getSemiDetacher() return new SuperSemiDetacher(Super SemiDetacher)
9、; 7、添加GUI: (1)public static final String SEMIDETACHER = SemiDetacher; (2)cmbHouseType.addItem(SEMIDETACHER); (3)if (type.equals(AbstractFactoryGUI.SEMIDETACHER) SemiDetacher cd = bf.getSemiDetacher(); String fileNm = cd.getSemiDetacherInfo(); putHouseInfoToScreen(fileNm); 【實驗結(jié)果】 【實驗小結(jié)】 當客戶對象要從一個相關(guān)的產(chǎn)
10、品組中創(chuàng)建一個對象,而沒有必要知道到底要創(chuàng)建哪個對象時,可以使用抽象工廠模式。如果不使用抽象工廠模式,創(chuàng)建對象的條件語句將會出現(xiàn)在客戶程序的許多地方,程序的克維護性差。抽象工廠模式幫助程序員避免了以上所述的重復(fù)的、復(fù)雜的條件語句,提供必要的創(chuàng)建對象的接口。實驗二組合模式空軍指揮系統(tǒng)【實驗內(nèi)容】 在例3.3的設(shè)計中,添加一個空軍大隊(Wing)類,該類與Squadron、Group類是平行的,因此應(yīng)該繼承了AirUnit類。該類的寫法與Squadron或者Group類是類似的,所不同的是一個Wing有216中類型的飛機?!咎砑哟a】1、 添加Wing類: public class Wing ex
11、tends AirUnit public static final String FEATURES = A Wing with 216 aircrafts; Airforce fighters = new Airforce162; Airforce bombers = new Airforce18; Airforce transporters= new Airforce18; Airforce eAircrafts = new Airforce18; public Wing() for(int k=0;k162;k+) / need 162 fighters for(int k=0;k18;k
12、+) / need 18 bombers for(int k=0;k18;k+) / need 18 transporters for(int k=0;k=A)&(nStr.charAt(0) =Z)| (nStr.charAt(0) =a)&(nStr.charAt(0) =z) & (len=5) ) for(int m=0; m=0&nStr.charAt(m)=9) b+; if(m=0)&(Character.isLetter(nStr.charAt(m)=false) isValid=false; if(a!=1) isValid=false; if(b=0) isValid=fa
13、lse; return isValid; else return false; 2、 添加CusInfoValidator: public abstract boolean isValidEmailAddr(String EmailAddr);3、添加GUI: (1)private JTextField txtCustomerName, txtAddress,txtZip,txtCellPhone,txtSSN,txtEmailAddr; (2)private JLabel lblCustomerName, lblAddress,lblZip, lblCellphone, lblSSN, lb
14、lEmailAddr; (3)txtEmailAddr=new JTextField(20); (4)lblEmailAddr= new JLabel(EmailAddr :); (5)UIPanel.add(lblEmailAddr); UIPanel.add(txtEmailAddr); (6)gridbag.setConstraints(lblEmailAddr, gbc); gbc.gridx = 1; gbc.gridy = 5; gridbag.setConstraints(txtEmailAddr, gbc); gbc.gridx = 0; gbc.gridy = 6; (7)p
15、ublic String getEmailAddr() return txtEmailAddr.getText(); (8)String emailaddr = getEmailAddr(); (9)if(cusInfo.isValidEmailAddr(emailaddr)=false) dataTextArea.append(nWrong format of EmailAddr.); else dataTextArea.append(nCorrect format of EmailAddr.); 【實驗結(jié)果】 【實驗小結(jié)】 通過適配器,客戶端可以調(diào)用同一接口,因而對客戶端來說是透明的。這樣
16、做更簡單、更直接、更緊湊;復(fù)用了現(xiàn)存的類,解決了現(xiàn)存類和復(fù)用環(huán)境要求不一致的問題;將目標類和適配者類解耦,通過引入一個適配器類重用現(xiàn)有的適配者類,而無需修改原有代碼;一個對象適配器可以把多個不同的適配者類適配到同一個目標,也就是說,同一個適配器可以把適配者類和它的子類都適配到目標接口。對于對象適配器來說,更換適配器的實現(xiàn)過程比較復(fù)雜。實驗三橋接模式幾何立體體積【實驗內(nèi)容】在例3.14中的設(shè)計實驗層次類部分中,添加Ellipsoid(橢球)類,并且實現(xiàn)針對橢球體積的計算?!咎砑哟a】1、添加橢球類: public class Ellipsoid implements GeoForm privat
17、e double aRadius; private double bRadius; private double cRadius; public Ellipsoid (double aRadius, double bRadius, double cRadius) this.aRadius = aRadius; this.bRadius = bRadius; this.cRadius = cRadius; public double computeVolume() double volume = 1.*3.* aRadius* bRadius* cRadius; return volume; 2
18、、添加GUI:(1)private JTextField txtEllipsoidRadius_a; private JTextField txtEllipsoidRadius_b; private JTextField txtEllipsoidRadius_c; (2)public static final String ELLIPSOID = Ellipsoid;(3)cmbGeoForm.addItem(ELLIPSOID);(4)else if(selection.equals(ELLIPSOID) ) String a_radius = txtEllipsoidRadius_a.ge
19、tText(); String b_radius = txtEllipsoidRadius_b.getText(); String c_radius = txtEllipsoidRadius_c.getText(); double a = Double.valueOf(a_radius); double b =Double.valueOf(b_radius); double c = Double.valueOf(c_radius); form = new Ellipsoid(a, b, c);(5)else if(selection.equals(ELLIPSOID) ) displayNew
20、GUI( getTypePanel(ELLIPSOID);(6)else if(type.equals(ELLIPSOID) JLabel lblRadius_a = new JLabel(Input Radius a); JLabel lblRadius_b = new JLabel(Input Radius b); JLabel lblRadius_c = new JLabel(Input Radius c); txtEllipsoidRadius_a = new JTextField(8); txtEllipsoidRadius_b = new JTextField(8); txtEll
21、ipsoidRadius_c = new JTextField(8); GridBagLayout gridbag = new GridBagLayout(); typePanel.setLayout(gridbag); GridBagConstraints gbc = new GridBagConstraints(); typePanel.add(lblRadius_a); typePanel.add(lblRadius_b); typePanel.add(lblRadius_c); typePanel.add(txtEllipsoidRadius_a); typePanel.add(txt
22、EllipsoidRadius_b); typePanel.add(txtEllipsoidRadius_c); typePanel.add(lblMeasure); typePanel.add(cmbMeasure); gbc.insets.top = 5; gbc.insets.bottom = 5; gbc.insets.left = 1; gbc.insets.right = 8; gbc.anchor = GridBagConstraints.WEST; gbc.gridx = 0; gbc.gridy = 0; gridbag.setConstraints(lblRadius_a,
23、 gbc); gbc.gridx = 1; gbc.gridy = 0; gridbag.setConstraints(txtEllipsoidRadius_a, gbc); gbc.gridx = 0; gbc.gridy = 1; gridbag.setConstraints(lblRadius_b, gbc); gbc.gridx = 1; gbc.gridy = 1; gridbag.setConstraints(txtEllipsoidRadius_b, gbc); gbc.gridx = 0; gbc.gridy = 2; gridbag.setConstraints(lblRad
24、ius_c, gbc); gbc.gridx = 1; gbc.gridy = 2; gridbag.setConstraints(txtEllipsoidRadius_c, gbc); gbc.gridx = 0; gbc.gridy = 3; gridbag.setConstraints(lblMeasure, gbc); gbc.gridx = 1; gbc.gridy = 3; gridbag.setConstraints(cmbMeasure, gbc); 【實驗結(jié)果】【實驗小結(jié)】 通過這次實驗我們大概理解了橋接模式,通過關(guān)聯(lián)“抽象層次類”與“具體層次類”這一橋梁,將表示兩個維度的層
25、類(數(shù)據(jù)結(jié)構(gòu))粘貼在一起,形成更大的數(shù)據(jù)結(jié)構(gòu),而這種變化又不會對現(xiàn)有的類產(chǎn)生影響,這種思路的終極想法是將軟件設(shè)計的抽象部分與實現(xiàn)部分分離,使它們都可以獨立的變化。訪問者模式計算機部件銷售軟件【實驗內(nèi)容】 在例4.5的設(shè)計中添加一個類SoundBox。該類實現(xiàn)接口ComputerParts,并且其他的計算機部件的類的結(jié)構(gòu)類似?!咎砑哟a】1、添加SoundBox類: public class SoundBox implements ComputerParts public static final String NAME = SoundBox;private final double PRICE
26、 = 127.00;public static final String FEATURES = SoundBox. X3K;public String getName()return NAME;public double getPrice() return PRICE; public String getDescription() return FEATURES;public void accept(Visitor v) System.out.println(SoundBox has been visited.); v.visitSoundBox (this); 2、 添加GUI: (1)St
27、ring compParts= Case,Motherboard,Microprocessor,Memory, DriveController,VideoCard,Fan,PowerSupply, HardDiskDrive,CDDrive,DVDDevice,Monitor, Keyboard,Mouse,SoundBox,Assembly,WholePC; (2)for(int k=11; k17; k+) add(0, k, cPartsk); (3)else if (source = cParts14) states14 = state; else if (source = cPart
28、s15) if(state = SELECTED) cParts1.setSelected(true); cParts8.setSelected(true); else if (state = DESELECTED) cParts1.setSelected(false); cParts8.setSelected(false); states15=state; else if (source = cParts16) if(state = SELECTED) cParts0.setSelected(true); for(int k=11; k15; k+) cPartsk.setSelected(
29、true); else if (state = DESELECTED) cParts0.setSelected(false); for(int k=11; k15; k+) cPartsk.setSelected(false); states16=state; (4)else if (m=14) & (states14 = SELECTED) part = new SoundBox(); msg.add(SoundBox); 3、添加Visitor: public abstract void visitSoundBox (SoundBox e);4、 添加PriceVisitor: publi
30、c void visitSoundBox (SoundBox e)price = e.getPrice();partsPrices.add(new Double(price);total += price; 5、添加PartsInfoVisitor: public void visitSoundBox (SoundBox e)partInfo = e.getDescription();allOders = allOders + n + partInfo;【實驗結(jié)果】【實驗小結(jié)】 通過此次實驗讓我們更加深刻的理解了訪問者模式,它在處理數(shù)據(jù)結(jié)構(gòu)較穩(wěn)定,但是作用于其上的操作需要經(jīng)常變化的問題時時非常
31、有效的,因此可以在不改變該結(jié)構(gòu)體中的類的基礎(chǔ)上定義一個新的操作,這個實驗就是如此,我們只需要添加新的類,然后調(diào)用accept(pv)方法就可以。實驗四策略模式整數(shù)排序【實驗內(nèi)容】在例4.13的設(shè)計中的排序策略部分,添加一個類BidirectionaBubbleSort,進行“雙向冒泡法排序”,以便擴展該排序系統(tǒng)的功能。為了實現(xiàn)擴展功能,需要相應(yīng)地修改Context類與客戶圖形界面類StrategyGUI?!咎砑哟a】1、 添加BidirBubbleSort類: public class BidirBubbleSort implements SortAlgorithm public int so
32、rt(int nums,Context ct) ct.startExecution(); int j; int limit = nums.length; int st = -1; while(st limit) boolean flipped = false; st+; limit-; for(j = st; j numsj + 1) int T = numsj; numsj = numsj + 1; numsj + 1 = T; flipped = true; if(!flipped) ct.endExecution(); return nums; for(j = limit; -j = s
33、t;) if(numsj numsj + 1) int T = numsj; numsj = numsj + 1; numsj + 1 = T; flipped = true; if(!flipped) ct.endExecution(); return nums; ct.endExecution(); return nums; 2、 添加GUI: (1)public static final String BidirBubble= BidirBubbleSort; (2)cmbAlgorithm.addItem(BidirBubble); (3)if (type.equals(BidirBu
34、bble) sa = new BidirBubbleSort(); 【實驗結(jié)果】【實驗小結(jié)】 通過此次實驗讓我們更加理解了策略模式的優(yōu)勢,實現(xiàn)了高內(nèi)聚低耦合,它的應(yīng)用場景是當有多個僅在行為上不同但是相關(guān)的類存在時,采用策略模式提供一個為一個類配置多種行為之一的方法。此時增加雙向冒泡排序法時,不需要修改Context類的代碼,只需要修改客戶類(StrategyGUI)。狀態(tài)模式交通信號燈【實驗內(nèi)容】在例4.16的設(shè)計中的交通信號燈狀態(tài)部分,添加一個類BlueLight,進行紅綠黃藍紅的狀態(tài)變化,以便擴展該交通信號燈系統(tǒng)的狀態(tài)。【添加代碼】1、添加BlueLight類: import java.awt.Color; public class BlueLight extends TrafficLight public BlueLight() state = BLUE; public
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報參考:健全全過程人民民主制度體系研究
- 課題申報參考:家校社聯(lián)動共育模式對青少年24h活動行為與抑郁癥狀改善的促進研究
- 2025年香港離婚協(xié)議書范本離婚后子女監(jiān)護權(quán)協(xié)議3篇
- 二零二五年影視剪輯師版權(quán)合作協(xié)議3篇
- 二零二五版白酒銷售顧問銷售數(shù)據(jù)分析與報告合同3篇
- 二零二五版木材廠土地租賃合同與林業(yè)產(chǎn)業(yè)發(fā)展規(guī)劃3篇
- 二零二五版國際IT產(chǎn)品代理銷售協(xié)議2篇
- 2025版小區(qū)公共區(qū)域保潔與綠化維護承包合同3篇
- 2025年三明貨運從業(yè)資格證好考嗎
- 二零二五版供應(yīng)鏈融資高額抵押反擔保合同3篇
- 2024公路瀝青路面結(jié)構(gòu)內(nèi)部狀況三維探地雷達快速檢測規(guī)程
- 2024年高考真題-地理(河北卷) 含答案
- 中國高血壓防治指南(2024年修訂版)解讀課件
- 2024風(fēng)力發(fā)電葉片維保作業(yè)技術(shù)規(guī)范
- 《思想道德與法治》課程教學(xué)大綱
- 封條(標準A4打印封條)
- 運動技能學(xué)習(xí)與控制課件第十章動作技能的指導(dǎo)與示范
- 石油天然氣建設(shè)工程交工技術(shù)文件編制規(guī)范(SYT68822023年)交工技術(shù)文件表格儀表自動化安裝工程
- 中醫(yī)治療“濕疹”醫(yī)案72例
- 2023年大學(xué)生《思想道德與法治》考試題庫附答案(712題)
- 清代文學(xué)緒論
評論
0/150
提交評論