《軟件體系結構》實驗報告_第1頁
《軟件體系結構》實驗報告_第2頁
《軟件體系結構》實驗報告_第3頁
《軟件體系結構》實驗報告_第4頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

《軟件體系結構》實驗報告項目名稱 結構型設計模式實驗專業(yè)班級 1206 學號 3901120604 姓名 金初陽 實驗成績:批閱教師:實驗4結構型設計模式實驗實驗學時:_2每組人數(shù):一]實驗類型:_3 (1:基礎性2:綜合性 3:設計性4:研究性)實驗要求:一1 (1:必修2:選修 3:其它)實驗類別:一3 (1:基礎2:專業(yè)基礎3:專業(yè)4:其它)ー、實驗目的熟練使用PowerDesigner和任意ー種面向對象編程語言實現(xiàn)幾種常見的結構型設計模式,包括適配器模式、組合模式和外觀模式,理解每ー種設計模式的模式動機,掌握模式結構,學習如何使用代碼實現(xiàn)這些模式。二、實驗內容.現(xiàn)有一個接口DataOperation定義了排序方法sort(int口)和查找方法search(int[],int),已知類Quicksort的quickSort(intロ)方法實現(xiàn)了快速排序算法,類BinarySearch的binarySearch(intロ,int)方法實現(xiàn)了二分查找算法。試使用適配器模式設計ー個系統(tǒng),在不修改源代碼的情況下將類Quicksort和類BinarySearch的方法適配到DataOperation接口中。繪制類圖并編程實現(xiàn)。(要求實現(xiàn)快速排序和二分查找,使用對象適配器實現(xiàn)).WindowsMediaPlayer和RealPlayer是兩種常用的媒體播放器,它們的API結構和調用方法存在區(qū)別。現(xiàn)在你的應用程序需要支持這兩種播放器API,而且在將來可能還需要支持新的媒體播放器,請問如何設計該應用程序?繪制類圖并編程模擬實現(xiàn)。.使用組合模式設計ー個殺毒軟件(AntiVirus)的框架,該軟件既可以對某個文件夾(Folder)殺毒,也可以對某個指定的文件(File)進行殺毒,文件種類包括文本文件TextFile、圖片文件ImageFile、視頻文件VideoFile。繪制類圖并編程模擬實現(xiàn)。.某教育機構組織結構如下圖所示:在該教育機構的OA系統(tǒng)中可以給各級辦公室下發(fā)公文,試采用組合模式設計該機構的組織結構,繪制相應的類圖并編程模擬實現(xiàn),在客戶端代碼中模擬下發(fā)公文。.某軟件公司為新開發(fā)的智能手機控制與管理軟件提供了?鍵備份功能,通過該功能可以將原本存儲在手機中的通信錄、短信、照片、歌曲等資料一次性全部拷貝到移動存儲介質(例如MMC卡或SD卡)中。在實現(xiàn)過程中需要與多個已有的類進行交互,例如通訊錄管理類、短信管理類等,為了降低系統(tǒng)的耦合度,試使用外觀模式來設計并編程模擬實現(xiàn)該ー鍵備份功能。6,某信息系統(tǒng)需要提供ー個數(shù)據(jù)處理和報表顯示模塊,該模塊可以讀取不同類型的文件中的數(shù)據(jù)并將數(shù)據(jù)轉換成XML格式,然后對數(shù)據(jù)進行統(tǒng)計分析,最后以報表方式來顯示數(shù)據(jù)。由于該過程需要涉及到多個類,試使用外觀模式設計該數(shù)據(jù)處理和報表顯示模塊。考慮到有些文件本身已經是XML格式,無須進行格式轉換,為了讓系統(tǒng)具有更好的擴展性,在系統(tǒng)設計中可以引入抽象外觀類。三、實驗要求.結合實例,正確無誤地繪制適配器模式、組合模式和外觀模式的模式結構圖:.使用任意ー種面向對象編程語言實現(xiàn)適配器模式、組合模式和外觀模式實例,代碼運行正確無誤。四、實驗步驟.結合實例,使用PowerDesigner繪制適配器模式實例結構圖并用面向對象編程語言實現(xiàn)該模式實例;.結合實例,使用PowerDesigner繪制適配器模式實例結構圖并用面向對象編程語言實現(xiàn)該模式實例:.結合實例,使用PowerDesigner繪制組合模式實例結構圖并用面向對象編程語言實現(xiàn)該模式實例:.結合實例,使用PowerDesigner繪制組合模式實例結構圖并用面向對象編程語言實現(xiàn)該模式實例:.結合實例,使用PowerDesigner繪制外觀模式實例結構圖并用面向對象編程語言實現(xiàn)該模式實例:.結合實例,使用PowerDesigner繪制外觀模式實例結構圖并用面向對象編程語言實現(xiàn)該模式實例。五、實驗結果1.類圖:實現(xiàn)代碼:Client.javapackagecom.exercise2.Test1;importutil.ParseXML;publicclassClient{publicstaticvoidmain(String[]args){DataOperationoperation=(DataOperation)ParseXML.getBeanObjO;int[]array={1,3,4,56,34,54,67,8);int[]array1={1,3,4,8,34,54,56,67);intkey=8;System.out.println("原始數(shù)組)for(inti=0;i<array.length;i++){System.out.print(array[i]+い);)System.out.println(" n);operation.sort(array);System.out.println("快排之后的數(shù)據(jù)");for(inti=0;i<array.length;i++){System.out.print(array[i]+“");)System.out.println(H *');System.out.println("indexof"+key+”:n4-operation.search(arrayl,key));DataOperation.javapackagecom.exercise2.Testl;publicinterfaceDataOperation{voidsort(int[]array);intsearch(int[]array,intkey);}DataOperationAdapter.javapackagecom.exercise2.Testl;publicclassDataOperationAdapterimplementsDataOperation{?Overridepublicvoidsort(int[]array){QuickSort.sort(array);?Overridepublicintsearch(int[]array,intkey){returnBinarySearch.binarySearch(array,key);)QuickSort.javapackagecom.exercise2.Testl;importjava.util.Arrays;publicclassQuicksort{publicstaticvoidsort(int[]array){Arrays.sort(array);}}BinarySearch.javapackagecom.exercise2.Testl;publicclassBinarySearch{publicstaticintbinarySearch(int[]array,intkey){QuickSort.sort(array);intlow=0;inthigh=array.length-1;intmiddle=(low+high)/2;while(low<=high){middle=(low+high)/2;if(key>array[middle]){low=middle+1;}elseif(key<array[middle]){high=middle-1;}else{returnmiddle;))return-1;}}實驗結果:原始數(shù)組134563454678 - - 快排之后的數(shù)據(jù)134834545667 indexof8:32.類圖:

ー實現(xiàn)代碼:Cilent.javapackagecom.exercise2.Test2;importjava.io.File;importutil.ParseXML;publicclassCilent{publicstaticvoidmain(String[]args){Targettarget=(Target)ParseXML.getBeanObjO;Filefile=newFile,”);target.play(file);Target.javapackagecom.exercise2.Test2;importjava.io.File;publicclassTarget{publicvoidplay(Filefile){)}RealPIayerAdapter.javapackagecom.exercise2.Test2;importjava.io.File;publicclassRealPlayerAdapterextendsTarget)publicvoidplay(Filefile){newRealPlayer().play(file);RealPlayer.javapackagecom.exercise2.Test2;importjava.io.File;publicclassRealPlayer{publicvoidplay(Filefile){System.out.println("useRealPlayerplaymusic'*);WindowsMediaPlayer.javapackagecom.exercise2.Test2;importjava.io.File;publicclassWindowsMediaPlayer{publicvoidplay(Filefile){System.out.println(MuseWindowsMediaPlayerplaymusic*1);WindowsMediaPlayerAdapter.javapackagecom.exercise2.Test2;importjava.io.File;publicclassWindowsMediaPlayerAdapterextendsTarget)publicvoidplay(Filefile){newWindowsMediaPlayer().play(file);實驗結果:gMarkers二Properties泉Servers賓DataSourceExplorer在SnippetsヒProblems曰Console區(qū)!〈terminated〉Cilent[JavaApplication]C:\ProgramFiles\Java\jreAbin\javaw.exe(2014^12^170下午3:4useRealPlayerplaymusic3.類圖:實現(xiàn)代碼:AbstractElement.javapackagecom.exercise2.Test3;publicabstractclassAbstractElement{abstractvoidantiVirus();abstractvoidadd(AbstractElementelement);abstractvoidremove(AbstractElementelement);abstractAbstractElementgetElement(intindex);}Folder.javapackagecom.exercise2.Test3;importjava.util.ArrayList;publicclassFolderextendsAbstractElement{ArrayList<AbstractElement>list;publicFolder(){super();list=newArrayList<AbstractElement>();)?OverridevoidantiVirus(){for(AbstractElementelement:list){element.antiVirus();}?Overridevoidadd(AbstractElementelement){list.add(element);?Overridevoidremove(AbstractElementelement){list.remove(element);?OverrideAbstractElementgetElement(intindex){returnlist.get(index);)}TextFile.javapackagecom.exercise2.Test3;publicclassTextFileextendsAbstractElement{?OverridevoidantiVirus(){System.out.println("antivirusatTextFile");?Overridevoidadd(AbstractElementelement){System.out.println("failtoaddelement");?Overridevoidremove(AbstractElementelement){System.out.println("failtoremoveelement");?OverrideAbstractElementgetElement(intindex){//TODOAuto-generatedmethodstubreturnnull;)}ImageFile.javapackagecom.exercise2.Test3;publicclassImageFileextendsAbstractElement{?OverridevoidantiVirus(){System.out.println("antivirusatImageFile");?Overridevoidadd(AbstractElementelement){System.out.println(Hfailtoaddelement**);?Overridevoidremove(AbstractElementelement){System.out.println(**failtoremoveelement**);?OverrideAbstractElementgetElement(intindex){//TODOAuto-generatedmethodstubreturnnull;)}VideoFile.javapackagecom.exercise2.Test3;publicclassVideoFileextendsAbstractElement{?OverridevoidantiVirus(){System.out.println(nantivirusatVideoFile*');?Overridevoidadd(AbstractElementelement){System.out.println("failtoaddelement");?Overridevoidremove(AbstractElementelement){System.out.println("failtoremoveelement");?OverrideAbstractElementgetElement(intindex){//TODOAuto-generatedmethodstubreturnnull;

實驗結果:ほMarkersEProperties郴Servers鋪DataSourceExplorer加SnippetsにProblems日Console漢〈terminated〉Client(7)[JavaApplication]C:\ProgramFiles\Java\jre7\bin\javaw.exe(2014^12月22日下’antivirusatantivirusantivirusatantivirusatantivirusatantivirusatantivirusatVideoFileTextFileVideoFileTextFileImageFile|ー實現(xiàn)代碼:Componet.javapackagecom.exercise2.Test4;publicabstractclassComponet{publicStringname;abstractvoidadd(Componetc);abstractvoidremove(Componetc);abstractComponetgetChild(inti);abstractvoidoperation();}Composite.javapackagecom.exercise2.Test4;importjava.util.ArrayList;publicclassCompositeextendsComponet{publicArrayList<Componet>list;publicComposite(Stringname){list=newArrayList<Componet>();super,name=name;}?Overridevoidadd(Componetc){list.add(c);}?Overridevoidremove(Componetc){list.remove(c);?OverrideComponetgetChild(inti){returnlist.get(i);}?Overridevoidoperation(){for(Componetc:list){c.operation();))Leaf.javapackagecom.exercise2.Test4;publicclassLeafextendsComponet{publicLeaf(Stringname){super,name=name;}?Overridevoidadd(Componetc){System.out.println(Mfailtoaddcomponet'1);?Overridevoidremove(Componetc){System.out.println(Hfailtoremovecomponet");?OverrideComponetgetChild(inti){//TODOAuto-generatedmethodstubreturnnull;)?Overridevoidoperation(){System.out.println(name+”收至リ文件”);Client.javapackagecom.exercise2.Test4;publicclassClient{publicstaticvoidmain(String[]args){Componetdocument1,document2,documents,document4,documents,document6,document?,documents,organization1,organization2,organizations,organization4;organization1=newComposite("北京總部”);organization2=newComposite("湖南分校");organizations=newComposite("長沙教學點");organization4=newComposite("湘潭教學點");〃北京總部document1=newLeaf("北京總部教務辦公室”);document2=newLeaf("北京總部行政辦公室");organization1.add(documentl);organization1.add(document2);organization1.add(organization2);〃湖南分校documents=newLeaf("湖南分校教務辦公室");document4=newLeaf("湖南分校行政辦公室");organization2.add(document3);organization2.add(document4);organization2.add(organization3);organization2.add(organization4);〃長沙教學點documents=newLeaf("長沙教學點教務辦公室”);document6=newLeaf("長沙教學點行政辦公室”);organization3.add(document5);organization3.add(document6);〃湘潭教學點document?=newLeaf(”湘潭教學點教務辦公室”);documents=newLeaf(”湘潭教學點行政辦公室”);organization4.add(document7);organization4.add(document8);organization1.operation();實驗結果:傳MarkersMProperties覘Servers逸DataSourceExplorer山SnippetsProblems日Console區(qū)〈terminated〉Client(8)[JavaApplication]C:\ProgramFiIes\Java\jre7\bin\javaw.exe(2014^12月22日下午5:50:2北京總部教務辦公室收到文件北京總部行政辦公室收到文件湖南分校教務辦公室收到文件湖南分校行政辦公室收到文件長沙教學點教務辦公室收到文件長沙教學點行政辦公室收到文件湘潭教學點教務辦公室收到文件湘潭教學點行政辦公室收到文件5.類圖:實現(xiàn)代碼:Client.javapackagecom.exercise2.Test5;publicclassClient)publicstaticvoidmain(String[]args){FacadeManagermanager=newFacadeManager();manager.manage();FacadeManager.javapackagecom.exercise2.Test5;publicclassFacadeManager{privateContactsManagercontactsManager;privateSMSManagersmsManager;privatePhotoManagerphotoManager;privateMusicManagermusicManager;publicFacadeManager(){this.contactsManager=newContactsManager();this.smsManager=newSMSManager();this.photoManager=newPhotoManager();this.musicManager=newMusicManager();)publicvoidmanage(){contactsManager.manageContacts();smsManager.manageSMS();;photoManager.managePhoto();musicManager.manageMusic();))ContactsManager.javapackagecom.exercise2.Test5;publicclassContactsManager{publicvoidmanageContacts(){System.out.println("ContactsManagerismanagingcontacts");SMSManager.javapackagecom.exercise2.Test5;publicclassSMSManager{publicvoidmanageSMS(){System.out.println("SMSManagerismanagingsms");)}PhotoManager.javapackagecom.exercise2.Test5;publicclassPhotoManager{publicvoidmanagePhoto(){System.out.println("PhotoManagerismanagingphotoH);))MusicManager.javapackagecom.exercise2.Test5;publicclassMusicManager{publicvoidmanageMusic(){System.out.println(nMusicManagerismanagingmusic°);)}

實驗結果:Markers□Properties郴Servers說DataSourceExplorer在SnippetsProblems曰Console區(qū)〈terminated〉Client(9)[JavaApplication]C:\ProgramFiIes\Java\jreAbin\javaw.exe(2014^12月22日下午8:24::ContactsManagerismanagingcontactsSMSManagerismanagingsmsPhotoManagerismanagingphotoMusicManagerismanagingmusic|6.類圖:+showChart():voidFacade2AbstractFacade+showChart():voidFacade2Facadel+showChart():void+showChart()void必Reportshow+showReport():+showChart():void+showChart()void必Reportshow+showReport():voidDataProcess+processData():voidー實現(xiàn)代碼: Client.javapackagecom.exercise2.Test6;importutil.ParseXML;publicclassClient{publicstaticvoidmain(String[]args){AbstractFacadefacade=(AbstractFacade)ParseXML.getBeanObjO;facade.showChart();})AbstractFacade.javapackagecom.exercise2.Test6;publicabstractclassAbstractFacade{abstractvoidshowChart();}Facadel.javapackagecom.exercise2.Test6;publicclassFacade1extendsAbstractFacade{privateDataProcessdataProcess;privateReportshowreportShow;publicFacade1(){dataProcess=newDataProcess();reportShow=newReportShow();?OverridevoidshowChart(){dataPcessData();reportShow.showReport();)/r/

溫馨提示

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

最新文檔

評論

0/150

提交評論