版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、.計算機科學與技術(shù)學院軟件設計模式與體系結(jié)構(gòu)課程作業(yè)(一)( 2016/2017 學年 第二學期)學生姓名:雷 君學生專業(yè):軟件工程學生班級:142601學生學號:201426170108指導教師 :王 飛.目 錄實驗一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 的汽車保險管理應用程序?qū)嵗咸砑右粋€名為LuxuryCarInsuran
2、ce的類,并且,該類要與其他的類一樣能執(zhí)行相應的功能?!咎砑哟a】1、添加 LuxuryCarInsurance 類:public class LuxuryCarInsurance implements AutoInsuranceprivate String description;public String getInsuranceDescription()description = LuxuryCarInsurance: nnLuxuryCarInsurance coverage pays for medical bills + lost wages, rehabilitation, tr
3、eatment and/or + 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 Aut
4、oInsurance 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é)】使用工廠方法訪問并且初始化合適的類的對象,簡化了應用程序,應用程序本
5、身不再含有大量的條件語句判定何時選取哪個類。其次,工廠方法實現(xiàn)了一些特殊的某個類的機制,尤其是層次結(jié)構(gòu)不同的類需要不同的初始化方法的時候。.抽象工廠方法模式房屋信息【實驗內(nèi)容】在例 2.4 中設計并且實現(xiàn)了豪華(Super)和中等( Medum)別墅( House)和公寓(Condo)的查詢。要求在該設計的基礎上, 增加一個新的類SemiDetacher(半獨立式樓宇),并且編寫代碼實現(xiàn)相應的查詢功能?!咎砑哟a】1、添加 SemiDetacher類:public interface SemiDetacherpublic String getSemiDetacherInfo();public
6、String getSemiDetacherFeatures();2、添加 SuperSemiDetacher類:public class SuperSemiDetacher implements SemiDetacherprivate String name;public SuperSemiDetacher(String cName)name = cName;public String getSemiDetacherInfo()return superSemiDetacher.html;public String getSemiDetacherFeatures()return Super S
7、emiDetacher ;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);7、添
9、加 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é)】當客戶對象要從一個相關的產(chǎn)品組中
10、創(chuàng)建一個對象,而沒有必要知道到底要創(chuàng)建哪個對象時, 可以使用抽象工廠模式。 如果不使用抽象工廠模式,創(chuàng)建對象的條件語句將會出現(xiàn)在客戶程序的許多地方,程序的克維護性差。 抽象工廠模式幫助程序員避免了以上所述的重復的、復雜的條件語句, 提供必要的創(chuàng)建對象的接口。.實驗二組合模式空軍指揮系統(tǒng)【實驗內(nèi)容】在例 3.3 的設計中,添加一個空軍大隊(Wing)類,該類與 Squadron、Group類是平行的,因此應該繼承了AirUnit 類。該類的寫法與Squadron或者 Group類是類似的,所不同的是一個Wing 有 216 中類型的飛機?!咎砑哟a】1、添加 Wing 類:public clas
11、s Wing extends AirUnitpublic 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 fightersfor(int k=0;k18;
12、k+)/ need 18 bombersfor(int k=0;k18;k+)/ need 18 transportersfor(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=false;return
13、 isValid;elsereturn 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, lblEmailAddr
14、;( 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) public Stri
15、ng getEmailAddr() return txtEmailAddr.getText();( 8) String emailaddr = getEmailAddr();( 9) if(cusInfo.isValidEmailAddr(emailaddr)=false) dataTextArea.append(nWrong format of EmailAddr.);elsedataTextArea.append(nCorrect format of EmailAddr.);.【實驗結(jié)果】【實驗小結(jié)】通過適配器,客戶端可以調(diào)用同一接口,因而對客戶端來說是透明的。這樣做更簡單、更直接、更緊湊
16、;復用了現(xiàn)存的類,解決了現(xiàn)存類和復用環(huán)境要求不一致的問題;將目標類和適配者類解耦,通過引入一個適配器類重用現(xiàn)有的適配者類,而無需修改原有代碼;一個對象適配器可以把多個不同的適配者類適配到同一個目標,也就是說, 同一個適配器可以把適配者類和它的子類都適配到目標接口。對于對象適配器來說,更換適配器的實現(xiàn)過程比較復雜。.實驗三橋接模式幾何立體體積【實驗內(nèi)容】在例 3.14 中的設計實驗層次類部分中,添加Ellipsoid (橢球)類,并且實現(xiàn)針對橢球體積的計算?!咎砑哟a】1、添加橢球類:public class Ellipsoid implements GeoFormprivate double
17、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 computeV olume()double volume = 1.3333333*3.1415926* 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_
19、a.getText();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 = newJLabel lblRadius_b = newJLabel lblRadius_c = newJLabel(Input Radius a);JLabel(Input Radius b);JLabel(Input Radius c);txtEllipsoidRadius_a = new JTextField(8);txtEllipsoidRadius_b = new JTextField(8);txtEllipsoidR
21、adius_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(txtEllipsoidRadius
22、_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, gbc);gbc.gridx = 1;gbc.gr
23、idy = 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(lblRadius_c, gbc);gbc.gridx = 1;gbc.gridy =
24、 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é)】通過這次實驗我們大概理解了橋接模式,通過關聯(lián)“抽象層次類”與“具體層次類”這一橋梁,將表示兩個維度的層類(數(shù)據(jù)結(jié)構(gòu))粘貼在一起,形成更大的數(shù)據(jù)結(jié)構(gòu), 而這種變化又不會對現(xiàn)有的類產(chǎn)生影響,這種思路的終
25、極想法是將軟件設計的抽象部分與實現(xiàn)部分分離,使它們都可以獨立的變化。.訪問者模式計算機部件銷售軟件【實驗內(nèi)容】在例 4.5 的設計中添加一個類SoundBox。該類實現(xiàn)接口ComputerParts,并且其他的計算機部件的類的結(jié)構(gòu)類似。【添加代碼】1、添加 SoundBox類:public class SoundBox implements ComputerPartspublic static final String NAME = SoundBox;private final double PRICE = 127.00;public static final String FEATURES
26、= 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) String compParts= Case,Motherboard,Microprocessor,Mem
27、ory, 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 = cParts15)if(state = SELECTED)cParts1.setSelected(true);c
28、Parts8.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(true);else if (state = DESELECTED)cParts0.setSelected(false);f
29、or(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 (SoundBoxe);4、添加 PriceVisitor:public void visitSoundBox (SoundBoxe)price = e.getPrice();partsPrices.add(ne
30、w Double(price);total += price;5、添加 PartsInfoVisitor:public void visitSoundBox (SoundBoxe)partInfo = e.getDescription();allOders = allOders + n + partInfo;.【實驗結(jié)果】【實驗小結(jié)】通過此次實驗讓我們更加深刻的理解了訪問者模式,它在處理數(shù)據(jù)結(jié)構(gòu)較穩(wěn)定,但是作用于其上的操作需要經(jīng)常變化的問題時時非常有效的,因此可以在不改變該結(jié)構(gòu)體中的類的基礎上定義一個新的操作,這個實驗就是如此, 我們只需要添加新的類,然后調(diào)用accept(pv)方法就可以。.
31、實驗四策略模式整數(shù)排序【實驗內(nèi)容】在例 4.13 的設計中的排序策略部分, 添加一個類 BidirectionaBubbleSort,進行“雙向冒泡法排序”, 以便擴展該排序系統(tǒng)的功能。為了實現(xiàn)擴展功能, 需要相應地修改 Context 類與客戶圖形界面類StrategyGUI 。【添加代碼】1、添加 BidirBubbleSort類:publicclass BidirBubbleSort implements SortAlgorithmpublic int sort(int nums,Context ct)ct.startExecution();int j;int limit = nums.
32、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 = st;)if(numsj numsj + 1)int T = numsj;numsj = numsj + 1;numsj + 1 = T;flipped = true
33、;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(BidirBubble) sa = new BidirBubbleSort();【實驗結(jié)果】.【實驗小結(jié)】通過此次實驗讓我們更加理解了策略模式的優(yōu)勢,實現(xiàn)了高內(nèi)聚低耦合,它的應用場景是當有多個
34、僅在行為上不同但是相關的類存在時,采用策略模式提供一個為一個類配置多種行為之一的方法。此時增加雙向冒泡排序法時, 不需要修改 Context 類的代碼,只需要修改客戶類( StrategyGUI)。狀態(tài)模式交通信號燈【實驗內(nèi)容】在例 4.16 的設計中的交通信號燈狀態(tài)部分,添加一個類BlueLight ,進行紅 綠黃 藍 紅的狀態(tài)變化,以便擴展該交通信號燈系統(tǒng)的狀態(tài)?!咎砑哟a】1、添加 BlueLight 類:import java.awt.Color;public class BlueLight extends TrafficLightpublic BlueLight() .state = BLUE;public Color setC
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026河南洛陽洛寧縣人民醫(yī)院長期招聘20人備考題庫參考答案詳解
- 2026年鄉(xiāng)村醫(yī)生能力提升培訓課程
- 企業(yè)財務財務人員繼續(xù)教育與培訓手冊
- 2026年品牌精準定位策略制定培訓
- 建材行業(yè)2026年年度策略報告:成本構(gòu)筑護城河新場景新業(yè)務打開空間
- 華夏中核清潔能源REIT深度價值分析:和田最大水電站電價彈性可期
- 超級課件肖迪
- 職業(yè)壓力管理干預對醫(yī)療員工組織承諾的促進研究
- 職業(yè)共病管理中的成本效益分析
- 老公給老婆的保證書
- 安全附件管理制度規(guī)范
- 工程轉(zhuǎn)接合同協(xié)議
- 人教版(2024)七年級上冊數(shù)學期末綜合檢測試卷 3套(含答案)
- 2025年風險管理自查報告
- 2026年中國煤炭資源行業(yè)投資前景分析研究報告
- 項目成本控制動態(tài)監(jiān)測表模板
- DBJ46-074-2025 海南省市政道路瀝青路面建設技術(shù)標準
- 幼兒園小班語言《大一歲了》課件
- GB/T 14071-2025林木品種審定規(guī)范
- 移風易俗問答題目及答案
- 養(yǎng)生會所店長的日常職責
評論
0/150
提交評論