




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
#實驗4結構型設計模式實驗1:基礎性2:綜合性1:必修2:選修1:基礎2:專業基礎3:設計性4:研究性)3:其它)3:專業4:其它)熟練使用PowerDesigner和任意一種面向對象編程語言實現幾種常見的結構型設計模式,包括適配器模式、組合模式和外觀模式,理解每一種設計模式的模式動機,掌握模式結構,學習如何使用代碼實現這些模式。二、實驗內容1.現有一個接口DataOperation定義了排序方法sort(int[])和查找方法search(int[],int),已知類Quicksort的quickSort(int[])方法實現了快速排序算法,類BinarySearch的binarySearch(int[],int)方法實現了二分查找算法。試使用適配器模式設計一個系統,在不修改源代碼的情況下將類Quicksort和類BinarySearch的方法適配到DataOperation接口中。繪制類圖并編程實現。(要求實現快速排序和二分查找,使用對象適配器實現)2.WindowsMediaPlayer和RealPlayer是兩種常用的媒體播放器,它們的API結構和調用方法存在區別。現在你的應用程序需要支持這兩種播放器API,而且在將來可能還需要支持新的媒體播放器,請問如何設計該應用程序?繪制類圖并編程模擬實現。3?使用組合模式設計一個殺毒軟件(AntiVirus)的框架,該軟件既可以對某個文件夾(Folder)殺毒,也可以對某個指定的文件(File)進行殺毒,文件種類包括文本文件TextFile、圖片文件ImageFile、視頻文件VideoFile。繪制類圖并編程模擬實現。某教育機構組織結構如下圖所示:在該教育機構的OA系統中可以給各級辦公室下發公文,試采用組合模式設計該機構的組織結構,繪制相應的類圖并編程模擬實現,在客戶端代碼中模擬下發公文。某軟件公司為新開發的智能手機控制與管理軟件提供了一鍵備份功能,通過該功能可以將原本存儲在手機中的通信錄、短信、照片、歌曲等資料一次性全部拷貝到移動存儲介質(例如MMC卡或SD卡)中。在實現過程中需要與多個已有的類進行交互,例如通訊錄管理類、短信管理類等,為了降低系統的耦合度,試使用外觀模式來設計并編程模擬實現該一鍵備份功能。某信息系統需要提供一個數據處理和報表顯示模塊,該模塊可以讀取不同類型的文件中的數據并將數據轉換成XML格式,然后對數據進行統計分析,最后以報表方式來顯示數據。由于該過程需要涉及到多個類,試使用外觀模式設計該數據處理和報表顯示模塊。考慮到有些文件本身已經是XML格式,無須進行格式轉換,為了讓系統具有更好的擴展性,在系統設計中可以引入抽象外觀類。三、實驗要求結合實例,正確無誤地繪制適配器模式、組合模式和外觀模式的模式結構圖;使用任意一種面向對象編程語言實現適配器模式、組合模式和外觀模式實例,代碼運行正確無誤。四、實驗步驟結合實例,使用PowerDesigner繪制適配器模式實例結構圖并用面向對象編程語言實現該模式實例;結合實例,使用PowerDesigner繪制適配器模式實例結構圖并用面向對象編程語言實現該模式實例;結合實例,使用PowerDesigner繪制組合模式實例結構圖并用面向對象編程語言實現該模式實例;結合實例,使用PowerDesigner繪制組合模式實例結構圖并用面向對象編程語言實現該模式實例;結合實例,使用PowerDesigner繪制外觀模式實例結構圖并用面向對象編程語言實現該模式實例;結合實例,使用PowerDesigner繪制外觀模式實例結構圖并用面向對象編程語言實現該模式實例。五、實驗結果1.類圖:
DataOperation+sort(intiArray[]):voidQuicksortF+quicksort(intiArray[])voidBinarySearchQuicksortF+quicksort(intiArray[])voidBinarySearchAdapter-qSort:Quicksort-bSearch:BinarySearch+<<Constructor>>Adapter()+sort(intiArray[]):void+search(intiArray[],inttarget)int+binarySearch(intiArray[],inttargetjnt實現代碼:importutil.XMLUtil;publicclassClient{publicstaticvoidmain(String[]args){DataOperationdataOperation=(DataOperation)XMLUtil.getBean();intiArray[]={1,3,2,5,4};booleanresult=dataOperation.search(iArray,9);for(inti=0;i<5;i++){System.out.println(iArray[i]);}System.out.println(result);}}publicinterfaceDataOperation{publicvoidsort(int[]iArray);publicbooleansearch(int[]iArray,inttarget);}publicclassDataOperationAdapterimplementsDataOperation{privateQuicksortqSort;privateBinarySearchbSearch;publicDataOperationAdapter。{qSort=newQuickSort();bSearch=newBinarySearch();}@Overridepublicvoidsort(int[]iArray){qSort.quickSort(iArray);}@Overridepublicbooleansearch(int[]iArray,inttarget){returnbSearch.binarySearch(iArray,target);}}publicclassBinarySearch{publicbooleanbinarySearch(int[]iArray,inttarget){(newQuickSort()).quickSort(iArray);if(bSearch(iArray,target,0,iArray.length-1)==-1){returnfalse;}returntrue;}publicintbSearch(int[]iArray,inttarget,intlow,inthigh){if(low>high){return-1;}intmid=(high+low)/2;if(iArray[mid]==target){returnmid;}elseif(iArray[mid]<target){returnbSearch(iArray,target,mid+1,high);}elseif(iArray[mid]>target){returnbSearch(iArray,target,low,mid-1);}else{return-1;}}}publicclassQuickSort{publicvoidquickSort(int[]iArray){sort(iArray,0,iArray.length-1);}publicvoidsort(intarr[],intlow,inthigh){intl=low;inth=high;intpovit=arr[low];while(l<h){while(l<h&&arr[h]>=povit)h--;if(l<h){inttemp=arr[h];arr[h]=arr[l];arr[l]=temp;1++;}while(l<h&&arr[l]<=povit)l++;if(l<h){inttemp=arr[h];arr[h]=arr[l];arr[l]=temp;h--;}}//print(arr);//System.out.print("l="+(l+1)+"h="+(h+1)+"povit="+povit//+"\n");if(l>low)sort(arr,low,h-1);if(h<high)sort(arr,l+1,high);}}packageutil;importjava.io.File;importjava.io.IOException;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.parsers.ParserConfigurationException;importorg.w3c.dom.Document;importorg.w3c.dom.Node;importorg.w3c.dom.NodeList;importorg.xml.sax.SAXException;publicclassXMLUtil{publicstaticObjectgetBean(){try{〃創建DOM文檔對象DocumentBuilderFactorydocFactory=DocumentBuilderFactory.newInstance();DocumentBuilderdocBuilder=docFactory.newDocumentBuilder();Documentdocument=docBuilder.parse(newFile("config.xml"));〃獲取包含類名的文本節點NodeListnl=document.getElementsByTagName("className");NodeclassNode=nl.item(O).getFirstChild();StringclassName=classNode.getNodeValue();〃通過類名生成實例對象并將其返回@SuppressWarnings("rawtypes")Classclazz=Class.forName(className);Objectobj=clazz.newInstance();returnobj;}catch(ParserConfigurationExceptione){e.printStackTrace();}catch(SAXExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(InstantiationExceptione){e.printStackTrace();}catch(IllegalAccessExceptione){e.printStackTrace();}returnnull;}}<?xmlversion="1.0"encoding="UTF-8"?>vxml-body>vclassName>DataOperationAdapterv/className>v/xml-body>2.類圖:實現代碼:importutil.XMLUtil;publicclassClient{publicstaticvoidmain(String[]args){Playerplayer=(Player)XMLUtil.getBean();player.play();publicinterfacePlayer{voidplay();publicclassRealPlayerAdapterimplementsPlayer{publicRealPlayerrealPlayer;publicRealPlayerAdapter(){realPlayer=newRealPlayer();}publicvoidplay(){realPlayer.play();}}publicclassRealPlayer{publicvoidplay(){System.out.println("RealPlayer...");}}publicclassWMPlayerAdapterimplementsPlayer{publicWindowsMediaPlayerwindowsMediaPlayer;publicWMPlayerAdapter(){WindowsMediaPlayer=newWindowsMediaPlayer。;}publicvoidplay(){windowsMediaPlayer.play();}}publicclassWindowsMediaPlayer{publicvoidplay(){System.out.println("WindowsMediaPlayer...");}}packageutil;importjava.io.File;importjava.io.IOException;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.parsers.ParserConfigurationException;importorg.w3c.dom.Document;importorg.w3c.dom.Node;importorg.w3c.dom.NodeList;importorg.xml.sax.SAXException;publicclassXMLUtil{publicstaticObjectgetBean(){try{〃創建DOM文檔對象DocumentBuilderFactorydocFactory=DocumentBuilderFactory.newInstance();DocumentBuilderdocBuilder=docFactory.newDocumentBuilder();Documentdocument=docBuilder.parse(newFile("config.xml"));〃獲取包含類名的文本節點NodeListnl=document.getElementsByTagName("className");NodeclassNode=nl.item(O).getFirstChild();StringclassName=classNode.getNodeValue();〃通過類名生成實例對象并將其返回@SuppressWarnings("rawtypes")Classclazz=Class.forName(className);Objectobj=clazz.newInstance();returnobj;}catch(ParserConfigurationExceptione){e.printStackTrace();}catch(SAXExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(InstantiationExceptione){e.printStackTrace();}catch(IllegalAccessExceptione){e.printStackTrace();}
}retumnuII;<?xmlv……<xml-body>vclassName>WMPlayerAdapterv/className></xml-body>3.類圖:AbstractFile{abstract}#name:String+antivirus():void+add(AbstractFileabstractFile):void+remove(AbstractFileabstractFile)voidTextFileVideoFileTextFile++++++++++TextFile(Stringname)antivirus():voidadd(AbstractFileabstractFile):voidremove(AbstractFileabstractFile)voidVideoFile(Stringname)antivirus():voidadd(AbstractFileabstractFile):voidremove(AbstractFileabstractFile)voidFolder++++ImageFile(Stringname)antivirus()Folder++++ImageFile(Stringname)antivirus():voidadd(AbstractFileabstractFile):voidremove(AbstractFileabstractFile)void++++fileList:ArrayList<AbstractFile>antivirus()add(AbstractFileabstractFile)remove(AbstractFileabstractFile)voidFolder(Stringname)voidvoidImageFile實現代碼:publicclassClient{publicstaticvoidmain(String[]args){AbstractFilekejian=newFolder('課件”);AbstractFiledasan=newFolder("大三課件");AbstractFileshejimoshi=newFolder("設計模式");AbstractFileshiyanyaoqiu=newTextFile('實驗要求");AbstractFileliucheng=newImageFile(”實驗流程圖”);AbstractFileshinian=newVideoFile('十年video");AbstractFilesjkejian=newTextFile('設計模式課件”);AbstractFileshiyanbaogao=newFolder('實驗報告”);AbstractFileshiyanbaogaol=newTextFile('設計模式實驗報告1");AbstractFileshiyanbaogao2=newTextFile('設計模式實驗報告2");AbstractFileshiyanbaogao3=newTextFile('設計模式實驗報告3");AbstractFileshiyanbaogao4=newTextFile('設計模式實驗報告4");kejian.add(dasan);dasan.add(shejimoshi);shejimoshi.add(shiyanyaoqiu);shejimoshi.add(liucheng);shejimoshi.add(shinian);shejimoshi.add(sjkejian);shejimoshi.add(shiyanbaogao);shiyanbaogao.add(shiyanbaogao1);shiyanbaogao.add(shiyanbaogao2);shiyanbaogao.add(shiyanbaogao3);shiyanbaogao.add(shiyanbaogao4);kejian.antivirus();}}publicabstractclassAbstractFile{protectedStringname;publicabstractvoidantivirus();publicabstractvoidadd(AbstractFileabstractFile);publicabstractvoidremove(AbstractFileabstractFile);importjava.util.ArrayList;publicclassFolderextendsAbstractFile{privateArrayList<AbstractFile>fileList;publicFolder(Stringname){=name;fileList=newArrayList<AbstractFile>();}@Overridepublicvoidantivirus(){System.out.println(name+"antivirus(Folder)");for(AbstractFilefile:fileList){file.antivirus();}}@Overridepublicvoidadd(AbstractFileabstractFile){fileList.add(abstractFile);}@Overridepublicvoidremove(AbstractFileabstractFile){fileList.remove(abstractFile);}publicclassImageFileextendsAbstractFile{publicImageFile(Stringname){=name;}@Overridepublicvoidantivirus(){System.out.println(name+"antivirus(ImageFile)");}@Overridepublicvoidadd(AbstractFileabstractFile){System.out.println("youcan'tusethismethod!");}@Overridepublicvoidremove(AbstractFileabstractFile){System.out.println("youcan'tusethismethod!");}}publicclassTextFileextendsAbstractFile{publicTextFile(Stringname){=name;}@Overridepublicvoidantivirus(){System.out.println(name+"antivirus(TextFile)");@Overridepublicvoidadd(AbstractFileabstractFile){System.out.println("youcan'tusethismethod!");}@Overridepublicvoidremove(AbstractFileabstractFile){System.out.println("youcan'tusethismethod!");}}publicclassVideoFileextendsAbstractFile{publicVideoFile(Stringname){=name;}@Overridepublicvoidantivirus(){System.out.println(name+"antivirus(VideoFile)");}@Overridepublicvoidadd(AbstractFileabstractFile){System.out.println("youcan'tusethismethod!");}@Overridepublicvoidremove(AbstractFileabstractFile){System.out.println("youcan'tusethismethod!");}}4.類圖:AbstractDepartment{abstract}#name:String+send(Stringcontent):void+add(AbstractDepartmentdepartment):void+remove(AbstractDepartmentdepartment:)void...Office+send(Stringcontent)Office+send(Stringcontent):void+add(AbstractDepartmentdepartment):void+remove(AbstractDepartmentdepartment)void+<<Constructor>>Office()Department-departmentList:ArrayList<Department>+<<Constructor>>Department()+send(Stringcontent):void+add(AbstractDepartmentdepartment):void+remove(AbstractDepartmentdepartment:)void實現代碼:publicclassClient{publicstaticvoidmain(String[]args){AbstractDepartmentBJ=newDepartment("北京總部");AbstractDepartmentBJJWOffice=newOffice("北京教務辦公室");AbstractDepartmentHN=newDepartment^湖南分校");AbstractDepartmentBJXZOffice=newOffice("北京行政辦公室”);AbstractDepartmentHNJWOffice=newOffice('湖南教務辦公室");AbstractDepartmentCS=newDepartment^長沙教學點");AbstractDepartmentXT=newDepartment^湘潭教學點");AbstractDepartmentHNXZOffice=newOffice^湖南行政辦公室");AbstractDepartmentCSJWOffice=newOffice('長沙教務辦公室");AbstractDepartmentCSXZOffice=newOffice('長沙行政辦公室");AbstractDepartmentXTJWOffice=newOffice("湘潭教務辦公室");AbstractDepartmentXTXZOffice=newOffice("湘潭行政辦公室");BJ.add(BJJWOffice);BJ.add(HN);BJ.add(BJXZOffice);HN.add(HNJWOffice);HN.add(CS);HN.add(XT);HN.add(HNXZOffice);CS.add(CSJWOffice);CS.add(CSXZOffice);XT.add(XTJWOffice);XT.add(XTXZOffice);BJ.send("明天來北京總部開戶!”);}}publicabstractclassAbstractDepartment{protectedStringname;publicabstractvoidsend(Stringcontent);publicabstractvoidadd(AbstractDepartmentdepartment);publicabstractvoidremove(AbstractDepartmentdepartment);}importjava.util.ArrayList;publicclassDepartmentextendsAbstractDepartment{privateArrayList<AbstractDepartment>departmentList;publicDepartment(Stringname){departmentList=newArrayList<AbstractDepartment>();=name;}@Overridepublicvoidsend(Stringcontent){for(AbstractDepartmentdepartment:departmentList){System.out.println(name+"send"+content+"toitsnextdepartment"+);department.send(content);}}@Overridepublicvoidadd(AbstractDepartmentdepartment){departmentList.add(department);}@Overridepublicvoidremove(AbstractDepartmentdepartment){departmentList.remove(department);}}publicclassOfficeextendsAbstractDepartment{publicOffice(Stringname){=name;}@Overridepublicvoidsend(Stringcontent){System.out.println("youcan'tusethismethod!");}@Overridepublicvoidadd(AbstractDepartmentdepartment){System.out.println("youcan'tusethismethod!");
}@Overridepublicvoidremove(AbstractDepartmentdepartment){System.out.println("youcan'tusethismethod!");}}5.類圖:phoneBookManager.backup();messageManager.backup();pictureManager.backup();songManager.backup();phoneBookManager.backup();messageManager.backup();pictureManager.backup();songManager.backup();BackupFacade-phoneBookManager:PhoneBookManager-messageManager:MessageManager-pictureManager:PictureManager-songManager:SongManager+backup():void+<<Constructor>>BackupFacade(){PhoneBookManageMessageManager+backup():void+backup():void實現代碼:publicclassClient{publicstaticvoidmain(String[]args){BackupFacadebackupFacade=newBackupFacade。;backupFacade.backup();}}publicclassBackupFacade{privatePhoneBookManagerphoneBookManager;privateMessageManagermessageManager;privatePictureManagerpictureManager;privateSongManagersongManager;publicBackupFacade(){phoneBookManager=newPhoneBookManager();messageManager=newMessageManager();pictureManager=newPictureManager();songManager=newSongManager();}publicvoidbackup(){System.out.println(”備份中");phoneBookManager.backup();messageManager.backup();pictureManager.backup();songManager.backup();System.out.println("備份完成。。。");}}publicclassPhoneBookManager{publicvoidbackup(){System.out.println("PhoneBookbackup");}}publicclassMessageManager{publicvoidbackup(){System.out.println("Messagebackup");}}publicclassPictureManager{publicvoidbackup。{System.out.println("Picturebackup");}}publicclassSongManager{publicvoidbackup(){System.out.println("Songbackup");}}6.類圖:DataProcessingAbstractFacade+process():voidDataProcessingFacadel-reader:Reader-transformer:DataProcessingFacadel-reader:Reader-transformer:Transformer-StatisticalContainerStatisticalContainer-DisplayContainer:DisplayContainerDataProcessingFacade2-reader:Reader-StatisticalContainerStatisticalContainer-DisplayContainer:DisplayContainer+process():void+<<Constructor>>DataProcessingFacade2()+process():void+<<Constructor>>DataProcessingFacadel()ReaderTransformerStatisticalContainerDisplayContainer+read():void+toXML():void+statistics():void+display():void實現代碼:importutil.XMLUtil;publicclassClient{publicstaticvoidmain(String[]args){DataProcessingAbstractFacadedataProcessingAbstractFacade;dataProcessingAbstractFacade=(DataProcessingAbstractFacade)XMLUtil.getBean();dataProcessingAbstractFcess();}}publicinterfaceDataProcessingAbstractFacade{voidprocess();}publicclassDataProcessingFacadelimplementsDataProcessingAbstractFacade{publicReaderreader;publicTransformertransformer;publicStatisticalContainerstatisticalContainer;publicDisplayContainerdisplayContainer;publicDataProcessingFacade1(){reader=newReader();transformer=newTransformer。;statisticalContainer=newStatisticalContainer();displayContainer=newDisplayContainer();}publicvoidprocess(){System.out.println("usingDataProcessingFacade2");reader.read();transformer.toXML();statisticalContainer.statistics();displayContainer.display();}}publicclassDataProcessingFacade2implementsDataProcessingAbstractFacade{publicReaderreader;publicStatisticalContainerstatisticalContainer;publicDisplayContainerdisplayContainer;publicDataProcessingFacade2(){reader=newReader();statisticalContainer=newStatisticalContainer();displayContainer=newDisplayContainer();}publicvoidprocess。{System.out.println("usingDataProcessingFacade2");reader.read();statisticalContainer.statistics();displayContainer.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論