版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、軟件體系結(jié)構(gòu)實(shí)驗(yàn)報(bào)告項(xiàng)目名稱 結(jié)構(gòu)型設(shè)計(jì)模式實(shí)驗(yàn)專業(yè)班級(jí) 學(xué) 號(hào) 姓 名 實(shí)驗(yàn)成績(jī):批閱教師:年 月 日實(shí)驗(yàn)4 結(jié)構(gòu)型設(shè)計(jì)模式實(shí)驗(yàn)實(shí)驗(yàn)學(xué)時(shí): 2 每組人數(shù): 1 實(shí)驗(yàn)類型: 3 (1:基礎(chǔ)性 2:綜合性 3:設(shè)計(jì)性 4:研究性)實(shí)驗(yàn)要求: 1 (1:必修 2:選修 3:其它)實(shí)驗(yàn)類別: 3 (1:基礎(chǔ) 2:專業(yè)基礎(chǔ) 3:專業(yè) 4:其它)一、實(shí)驗(yàn)?zāi)康氖炀毷褂肞owerDesigner和任意一種面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)幾種常見(jiàn)的結(jié)構(gòu)型設(shè)計(jì)模式,包括適配器模式、組合模式和外觀模式,理解每一種設(shè)計(jì)模式的模式動(dòng)機(jī),掌握模式結(jié)構(gòu),學(xué)習(xí)如何使用代碼實(shí)現(xiàn)這些模式。二、實(shí)驗(yàn)內(nèi)容1. 現(xiàn)有一個(gè)接口DataOperat
2、ion定義了排序方法sort(int) 和查找方法search(int, int),已知類QuickSort的quickSort(int)方法實(shí)現(xiàn)了快速排序算法,類BinarySearch 的binarySearch(int, int)方法實(shí)現(xiàn)了二分查找算法。試使用適配器模式設(shè)計(jì)一個(gè)系統(tǒng),在不修改源代碼的情況下將類QuickSort和類BinarySearch的方法適配到DataOperation接口中。繪制類圖并編程實(shí)現(xiàn)。(要求實(shí)現(xiàn)快速排序和二分查找,使用對(duì)象適配器實(shí)現(xiàn))2. Windows Media Player和RealPlayer是兩種常用的媒體播放器,它們的API結(jié)構(gòu)和調(diào)用方法存在
3、區(qū)別?,F(xiàn)在你的應(yīng)用程序需要支持這兩種播放器API,而且在將來(lái)可能還需要支持新的媒體播放器,請(qǐng)問(wèn)如何設(shè)計(jì)該應(yīng)用程序?繪制類圖并編程模擬實(shí)現(xiàn)。3. 使用組合模式設(shè)計(jì)一個(gè)殺毒軟件(AntiVirus)的框架,該軟件既可以對(duì)某個(gè)文件夾(Folder)殺毒,也可以對(duì)某個(gè)指定的文件(File)進(jìn)行殺毒,文件種類包括文本文件TextFile、圖片文件ImageFile、視頻文件VideoFile。繪制類圖并編程模擬實(shí)現(xiàn)。4. 某教育機(jī)構(gòu)組織結(jié)構(gòu)如下圖所示:在該教育機(jī)構(gòu)的OA系統(tǒng)中可以給各級(jí)辦公室下發(fā)公文,試采用組合模式設(shè)計(jì)該機(jī)構(gòu)的組織結(jié)構(gòu),繪制相應(yīng)的類圖并編程模擬實(shí)現(xiàn),在客戶端代碼中模擬下發(fā)公文。5. 某軟
4、件公司為新開發(fā)的智能手機(jī)控制與管理軟件提供了一鍵備份功能,通過(guò)該功能可以將原本存儲(chǔ)在手機(jī)中的通信錄、短信、照片、歌曲等資料一次性全部拷貝到移動(dòng)存儲(chǔ)介質(zhì)(例如MMC卡或SD卡)中。在實(shí)現(xiàn)過(guò)程中需要與多個(gè)已有的類進(jìn)行交互,例如通訊錄管理類、短信管理類等,為了降低系統(tǒng)的耦合度,試使用外觀模式來(lái)設(shè)計(jì)并編程模擬實(shí)現(xiàn)該一鍵備份功能。 6. 某信息系統(tǒng)需要提供一個(gè)數(shù)據(jù)處理和報(bào)表顯示模塊,該模塊可以讀取不同類型的文件中的數(shù)據(jù)并將數(shù)據(jù)轉(zhuǎn)換成XML格式,然后對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,最后以報(bào)表方式來(lái)顯示數(shù)據(jù)。由于該過(guò)程需要涉及到多個(gè)類,試使用外觀模式設(shè)計(jì)該數(shù)據(jù)處理和報(bào)表顯示模塊??紤]到有些文件本身已經(jīng)是XML格式,無(wú)須
5、進(jìn)行格式轉(zhuǎn)換,為了讓系統(tǒng)具有更好的擴(kuò)展性,在系統(tǒng)設(shè)計(jì)中可以引入抽象外觀類。三、實(shí)驗(yàn)要求1. 結(jié)合實(shí)例,正確無(wú)誤地繪制適配器模式、組合模式和外觀模式的模式結(jié)構(gòu)圖;2. 使用任意一種面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)適配器模式、組合模式和外觀模式實(shí)例,代碼運(yùn)行正確無(wú)誤。四、實(shí)驗(yàn)步驟1. 結(jié)合實(shí)例,使用PowerDesigner繪制適配器模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例;2. 結(jié)合實(shí)例,使用PowerDesigner繪制適配器模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例;3. 結(jié)合實(shí)例,使用PowerDesigner繪制組合模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例;4. 結(jié)合實(shí)例,使用
6、PowerDesigner繪制組合模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例;5. 結(jié)合實(shí)例,使用PowerDesigner繪制外觀模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例;6. 結(jié)合實(shí)例,使用PowerDesigner繪制外觀模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例。五、實(shí)驗(yàn)結(jié)果1. 類圖:實(shí)現(xiàn)代碼:/* * Module: BinarySearch.java * Author: Administrator * Purpose: Defines the Class BinarySearch */import java.util.*;/* pdOid 209bdfa5-a
7、cff-485e-a496-dc80 */public class BinarySearch /* param array * param value * pdOid ba1a5cd0-df22-4fb8-9ce7-bcce610b3d30 */ public int binarySearch(int array, int value) / TODO: implement int low = 0; int high = array.length-1; while(lowhigh) int middle = (low+high)/2; if(arraymiddle=value) return m
8、iddle+1; else if(arraymiddlevalue) high = middle - 1; if(low=high) if(arraylow=value) return low+1; return -1; / public static void main(String args)/ int array =1,2,3,4,5,6,7,8,9,10;/ BinarySearch bina = new BinarySearch();/ int x =bina.binarySearch(array, 10);/ System.out.print(x);/ / /* * Module:
9、 Client.java * Author: Administrator * Purpose: Defines the Class Client */import java.util.*;/* pdOid c0-f653-4d08-8fba-090e54c06bc1 */public class Client public static void main(Stringargs)int array =100,9,7,28,47,98,288,40,58,2,16,49,66,9;int value = 100;DataOperation dataOP = (DataOperation)XMLU
10、til.getBean();dataOP.sort(array); for(int i=0;iarray.length;i+) System.out.print(arrayi+ ); System.out.println(n+dataOP.search(array, value);/* * Module: DataOperation.java * Author: Administrator * Purpose: Defines the Interface DataOperation */import java.util.*;/* pdOid 8ae548c4-33ee-41f3-a3ca-c2
11、708f */public interface DataOperation /* param array * pdOid a443b05c-7086-470c-bf20-60a406a10975 */ void sort(int array); /* param array * param value * return * pdOid 60008c08-0cf8-4889-8de7-4a73ed4e14c0 */ int search(int array, int value);/* * Module: DataOperationAdapter.java * Author: Administr
12、ator * Purpose: Defines the Class DataOperationAdapter */import java.util.*;/* pdOid c9ed4bcc-817f-4ee9-862b-7f1ebaabc048 */public class DataOperationAdapter implements DataOperation /* param array * pdOid a2c2f23c-a99d-4a08-91f6-dbc7 */ public void sort(int array) QuickSort quickSort = new QuickSor
13、t(); quickSort.quickSort(array); / TODO: implement /* param array * param value * pdOid 17dd16dc-4d19-44c0-b66a-02e11fc9d3bd */ public int search(int array, int value) / TODO: implement BinarySearch binarySearch = new BinarySearch(); return binarySearch.binarySearch(array, value); /* * Module: Quick
14、Sort.java * Author: Administrator * Purpose: Defines the Class QuickSort */import java.util.*;/* pdOid ef5ed092-24eb-464a-b1e3-5005f9a3c3f2 */public class QuickSort /* param array * pdOid 69c0b870-15d8-4315-a932-fc8eff */ public void quickSort(int array) / TODO: implement int n = array.length; digui
15、Sort(array,0,n-1); void diguiSort(int array,int y,int x) int value = arrayy; int i = y; int j = x; while(ij) while(arrayi=value & i=value & ij) j-; if(iarrayi) swap(array,y,i); else i-; swap(array,y,i); if(iy+1) diguiSort(array,y,i); if(ix-1) diguiSort(array,i+1,x); void swap(int array,int i,int j)
16、int value = arrayi; arrayi = arrayj; arrayj = value; / public static void main(String args)/ intarray =5,9,8,7,6,10,4,3,2,1,90,79;/ QuickSort quick = new QuickSort();/ quick.quickSort(array);/ for(int i=0;i12;i+)/ System.out.print(arrayi+ );/ / Config.xmlRealAdapter2. 類圖:實(shí)現(xiàn)代碼:/* * Module: Client.jav
17、a * Author: Administrator * Purpose: Defines the Class Client */import java.util.*;/* pdOid 588f59be-7d2f-4416-abde-f6aac80023ad */public class Client public static void main(String args)PlayerAPI player = (PlayerAPI)XMLUtil.getBean();player.run();/* * Module: PlayerAPI.java * Author: Administrator
18、* Purpose: Defines the Interface PlayerAPI */import java.util.*;/* pdOid aec32bb3-3fea-4675-92b7-1375a72e9159 */public interface PlayerAPI /* pdOid 3047f451-9d27-4334-bfaa-fbe3451a9dfe */ void run();/* * Module: RealAdapter.java * Author: Administrator * Purpose: Defines the Class RealAdapter */impo
19、rt java.util.*;/* pdOid 5bfa426e-7366-48df-9863-271c0e */public class RealAdapter extends RealAPI implements PlayerAPI /* pdOid 22e942aa-73f0-46db-83b3-342f8e3378dc */ public void run() / TODO: implement realRun(); /* * Module: RealAPI.java * Author: Administrator * Purpose: Defines the Class RealAP
20、I */import java.util.*;/* pdOid 760d8fcb-b33f-43cd-9b42-e351c13ee37b */public class RealAPI /* pdOid 4cebed7e-f200-4cb9-8908-3c65526a61bb */ public void realRun() / TODO: implement System.out.println(Real Player 正在播放); /* * Module: WMPAdapter.java * Author: Administrator * Purpose: Defines the Class
21、 WMPAdapter */import java.util.*;/* pdOid 0db13cde-c69d-4a50-b890-f7f116b47681 */public class WMPAdapter extends Wmpapi implements PlayerAPI /* pdOid 81925d86-9b28-4d0e-b47c-cf127ad19469 */ public void run() / TODO: implement wmpRun(); /* * Module: Wmpapi.java * Author: Administrator * Purpose: Defi
22、nes the Class Wmpapi */import java.util.*;/* pdOid 825bb43f-be50-4fd6-ad9f-9427efbd4f15 */public class Wmpapi /* pdOid d953f0dc-2fb1-46b5-b23e-6343ac7c11de */ public void wmpRun() / TODO: implement System.out.println(Windows Media Player 正在播放); import javax.xml.parsers.*;import org.w3c.dom.*;import
23、org.xml.sax.SAXException;import java.io.*;public class XMLUtil/該方法用于從XML配置文件中提取具體類類名,并返回一個(gè)實(shí)例對(duì)象 public static Object getBean() try /創(chuàng)建DOM文檔對(duì)象 DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dFactory.newDocumentBuilder(); Document doc; doc = builder.pa
24、rse(new File(src/config.xml); /獲取包含類名的文本節(jié)點(diǎn) NodeList nl = doc.getElementsByTagName(className); Node classNode=nl.item(0).getFirstChild(); String cName=classNode.getNodeValue(); /通過(guò)類名生成實(shí)例對(duì)象并將其返回 Class c=Class.forName(cName); Object obj=c.newInstance(); return obj; catch(Exception e) e.printStackTrace(
25、); return null; Config.xmlRealAdapter3. 類圖:實(shí)現(xiàn)代碼:/* * Module: AntiVirus.java * Author: ct * Purpose: Defines the Class AntiVirus */import java.util.*;/* pdOid ef6ff639-cb4d-4f80-8f6e-92814c25bc94 */public abstract class AntiVirus /* pdOid 3da78204-9191-4b73-b0ab-893a89c41937 */ /* pdOid 6bf1c539-9b1e
26、-4e92-9fd2-ae8e5fc7b719 */ public void antiVirus() / TODO: implement /* pdOid eb-cfa5-411e-a762-648b1aa80b0e */ public void add(AntiVirus an) / TODO: implement /* pdOid 72b2fa5a-025e-48c9-90e8-b0544fa40005 */ public void remove(AntiVirus an) / TODO: implement public static void main(String args)/ TO
27、DO: implement AntiVirus folder,image,text,video; folder = new Folder(); image = new ImageFile(); text = new TextFile(); video = new VideoFile(); folder.add(image); folder.add(video); folder.add(text); folder.antiVirus(); /* * Module: Folder.java * Author: ct * Purpose: Defines the Class Folder */imp
28、ort java.util.*;public class Folder extends AntiVirusprivate ArrayList antiVirus = new ArrayList();public void add(AntiVirus an)antiVirus.add(an);public void remove(AntiVirus an)antiVirus.remove(an);public void antiVirus()System.out.println(正在對(duì)文件夾殺毒);for(Object object:antiVirus)(AntiVirus)object).an
29、tiVirus();/* * Module: RealAdapter.java * Author: Administrator * Purpose: Defines the Class RealAdapter */import java.util.*;/* pdOid 5bfa426e-7366-48df-9863-271c0e */public class RealAdapter extends RealAPI implements PlayerAPI /* pdOid 22e942aa-73f0-46db-83b3-342f8e3378dc */ public void run() / T
30、ODO: implement realRun(); /* * Module: RealAPI.java * Author: Administrator * Purpose: Defines the Class RealAPI */import java.util.*;/* pdOid 760d8fcb-b33f-43cd-9b42-e351c13ee37b */public class RealAPI /* pdOid 4cebed7e-f200-4cb9-8908-3c65526a61bb */ public void realRun() / TODO: implement System.o
31、ut.println(Real Player 正在播放); /* * Module: WMPAdapter.java * Author: Administrator * Purpose: Defines the Class WMPAdapter */import java.util.*;/* pdOid 0db13cde-c69d-4a50-b890-f7f116b47681 */public class WMPAdapter extends Wmpapi implements PlayerAPI /* pdOid 81925d86-9b28-4d0e-b47c-cf127ad19469 */
32、 public void run() / TODO: implement wmpRun(); /* * Module: Wmpapi.java * Author: Administrator * Purpose: Defines the Class Wmpapi */import java.util.*;/* pdOid 825bb43f-be50-4fd6-ad9f-9427efbd4f15 */public class Wmpapi /* pdOid d953f0dc-2fb1-46b5-b23e-6343ac7c11de */ public void wmpRun() / TODO: i
33、mplement System.out.println(Windows Media Player 正在播放); import javax.xml.parsers.*;import org.w3c.dom.*;import org.xml.sax.SAXException;import java.io.*;public class XMLUtil/該方法用于從XML配置文件中提取具體類類名,并返回一個(gè)實(shí)例對(duì)象 public static Object getBean() try /創(chuàng)建DOM文檔對(duì)象 DocumentBuilderFactory dFactory = DocumentBuilde
34、rFactory.newInstance(); DocumentBuilder builder = dFactory.newDocumentBuilder(); Document doc; doc = builder.parse(new File(src/config.xml); /獲取包含類名的文本節(jié)點(diǎn) NodeList nl = doc.getElementsByTagName(className); Node classNode=nl.item(0).getFirstChild(); String cName=classNode.getNodeValue(); /通過(guò)類名生成實(shí)例對(duì)象并將
35、其返回 Class c=Class.forName(cName); Object obj=c.newInstance(); return obj; catch(Exception e) e.printStackTrace(); return null; Congfig.xmlRealAdapter4. 類圖:實(shí)現(xiàn)代碼:/* * Module: Department.java * Author: Administrator * Purpose: Defines the Class Department */import java.util.*;/* pdOid 94d24f84-b25f-41f
36、e-8df4-4b52fcf21733 */public class Department extends DepartmentAbstract /* pdOid d32990b8-9410-4cd7-a9dc-c3ac */ private ArrayList departmentList = new ArrayList(); /* pdOid 70c6772d-6307-449e-b1ee-90daf5d6e570 */ public String name; /* pdRoleInfo migr=no name=DepartmentAbstract assc=association1 c
37、oll=java.util.Collection impl=java.util.HashSet mult=0.* type=Aggregation */ public java.util.Collection departmentAbstract; public Department(String str) / TODO Auto-generated constructor stub name = str;/* pdOid ef3eb589-c646-4138-901f-2ba24a3b1f90 */ public void sendMessage() / TODO: implement Sy
38、stem.out.println(我是+name+我正在發(fā)送信息); for(Object object:departmentList) (DepartmentAbstract)object).sendMessage(); /* pdOid 3b1e1686-ffd0-4fe0-ba3a-a628ea148d14 */ public void add(DepartmentAbstract d) / TODO: implement departmentList.add(d); /* pdOid 7557e881-0a37-40b7-a0fd-e7c2550d0574 */ public void remove(DepartmentAbstract d) / TODO: implement departmentList.remove(d); /* pdGenerated default getter */ public java.util.Collection getDepartmentAbstract() if (departmentAbstract = null) departmentAbstract = new java.util.HashSet(); return departmentAbstract; /* p
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 光伏發(fā)電項(xiàng)目屋頂租賃合同
- 廣西小學(xué)教學(xué)樓合同協(xié)議書
- 海外打工合同書
- 合同到期聲明范本
- 2024年廣州客運(yùn)資格證應(yīng)用能力試題及答案詳解
- 2024對(duì)外建筑工程承包合同
- 2024家庭農(nóng)場(chǎng)土地租賃合同
- 深圳大學(xué)《自然辯證法》2021-2022學(xué)年第一學(xué)期期末試卷
- 魚肉購(gòu)銷合同(2篇)
- 種植松樹協(xié)議書(2篇)
- 第六章-冷凍真空干燥技術(shù)-wang
- 大學(xué)生職業(yè)生涯規(guī)劃成長(zhǎng)賽道
- 建設(shè)項(xiàng)目設(shè)計(jì)管理方案
- 2024年屆海南航空控股股份有限公司招聘筆試參考題庫(kù)含答案解析
- 前程無(wú)憂在線測(cè)試題庫(kù)及答案行測(cè)
- 《軍事理論》課程標(biāo)準(zhǔn)
- 倉(cāng)庫(kù)貨物條碼管理培訓(xùn)
- 第六章-中國(guó)早期社會(huì)學(xué)中的社區(qū)學(xué)派-《中國(guó)社會(huì)學(xué)史》必備
- 太陽(yáng)能發(fā)電技術(shù)在航天與航空領(lǐng)域的應(yīng)用
- 大學(xué)生預(yù)防猝死知識(shí)講座
- (2)反壟斷法(字向東)
評(píng)論
0/150
提交評(píng)論