您好,欢迎访问三七文档
1实验4结构型设计模式实验实验学时:2每组人数:1实验类型:3(1:基础性2:综合性3:设计性4:研究性)实验要求:1(1:必修2:选修3:其它)实验类别:3(1:基础2:专业基础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。绘制类图并编程模拟实现。4.某教育机构组织结构如下图所示:北京总部教务办公室湖南分校行政办公室长沙教学点湘潭教学点教务办公室行政办公室教务办公室行政办公室教务办公室行政办公室2在该教育机构的OA系统中可以给各级办公室下发公文,试采用组合模式设计该机构的组织结构,绘制相应的类图并编程模拟实现,在客户端代码中模拟下发公文。5.某软件公司为新开发的智能手机控制与管理软件提供了一键备份功能,通过该功能可以将原本存储在手机中的通信录、短信、照片、歌曲等资料一次性全部拷贝到移动存储介质(例如MMC卡或SD卡)中。在实现过程中需要与多个已有的类进行交互,例如通讯录管理类、短信管理类等,为了降低系统的耦合度,试使用外观模式来设计并编程模拟实现该一键备份功能。6.某信息系统需要提供一个数据处理和报表显示模块,该模块可以读取不同类型的文件中的数据并将数据转换成XML格式,然后对数据进行统计分析,最后以报表方式来显示数据。由于该过程需要涉及到多个类,试使用外观模式设计该数据处理和报表显示模块。考虑到有些文件本身已经是XML格式,无须进行格式转换,为了让系统具有更好的扩展性,在系统设计中可以引入抽象外观类。三、实验要求1.结合实例,正确无误地绘制适配器模式、组合模式和外观模式的模式结构图;2.使用任意一种面向对象编程语言实现适配器模式、组合模式和外观模式实例,代码运行正确无误。四、实验步骤1.结合实例,使用PowerDesigner绘制适配器模式实例结构图并用面向对象编程语言实现该模式实例;2.结合实例,使用PowerDesigner绘制适配器模式实例结构图并用面向对象编程语言实现该模式实例;3.结合实例,使用PowerDesigner绘制组合模式实例结构图并用面向对象编程语言实现该模式实例;4.结合实例,使用PowerDesigner绘制组合模式实例结构图并用面向对象编程语言实现该模式实例;5.结合实例,使用PowerDesigner绘制外观模式实例结构图并用面向对象编程语言实现该模式实例;6.结合实例,使用PowerDesigner绘制外观模式实例结构图并用面向对象编程语言实现该模式实例。五、实验结果1.类图:3实现代码:DataOperation.javapublicinterfaceDataOperation{publicvoidsort(int[]n);publicintsearch(int[]m,intn);}Adapter.javapublicclassAdapterimplementsDataOperation{privateBinarySearchbs;privateQuickSortqs;publicAdapter(){qs=newQuickSort();bs=newBinarySearch();}publicvoidsort(int[]n){qs.quickSort(n);}publicintsearch(int[]m,intn){returnbs.binarySearch(m,n);}}QuickSort.java4publicclassQuickSort{publicvoidquickSort(int[]n){intsize=n.length;quickSortMethod(n,0,size-1);}publicvoidquickSortMethod(intn[],intleft,intright){intq;if(leftright){q=partition(n,left,right);quickSortMethod(n,left,q-1);quickSortMethod(n,q+1,right);}}publicintpartition(intn[],intleft,intright){intshaft=n[left];inttemp=0;while(leftright){while(n[right]shaft)right--;while(n[left]shaft)left++;if(n[left]==n[right]){right--;}else{temp=n[left];n[left]=n[right];n[right]=temp;}}n[left]=shaft;returnleft;}}BinarySearch.java5publicclassBinarySearch{publicintbinarySearch(intm[],intn){QuickSortqs=newQuickSort();intleft=0;qs(m);intright=m.length;while(left=right){intmiddle=(left+right)/2;if(m[middle]==n)returnmiddle;elseif(m[middle]n)right=middle-1;elseleft=middle+1;}return-1;}}XMLUtil.javaimportjavax.xml.parsers.*;importorg.w3c.dom.*;importorg.xml.sax.SAXException;importjava.io.*;publicclassXMLUtil{//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象publicstaticObjectgetBean(){try{//创建DOM文档对象DocumentBuilderFactorydFactory=DocumentBuilderFactory.newInstance();DocumentBuilderbuilder=dFactory.newDocumentBuilder();Documentdoc;doc=builder.parse(newFile(src/config.xml));6//获取包含类名的文本节点NodeListnl=doc.getElementsByTagName(className);NodeclassNode=nl.item(0).getFirstChild();StringcName=classNode.getNodeValue();//通过类名生成实例对象并将其返回Classc=Class.forName(cName);Objectobj=c.newInstance();returnobj;}catch(Exceptione){e.printStackTrace();returnnull;}}}Client.javapublicclassClient{publicstaticvoidmain(Stringargs[]){int[]m={5,4,8,7,9,2,3,1,0,6};DataOperationdataoperation;dataoperation=(DataOperation)XMLUtil.getBean();dataoperation.sort(m);for(inti=0;im.length;i++){System.out.print(m[i]+);}System.out.println(\n+dataoperation.search(m,6));}}2.类图:7实现代码:Player.javapublicinterfacePlayer{publicabstractvoidplay(StringfileName);}WMPAdapter.javapublicclassWMPAdapterimplementsPlayer{privateWindowsMediaPlayerwmp;publicWMPAdapter(){wmp=newWindowsMediaPlayer();}publicvoidplay(StringfileName){wmp.play(fileName);}}8RPAdapter.javapublicclassRPAdapterimplementsPlayer{privateRealPlayerrp;publicRPAdapter(){rp=newRealPlayer();}publicvoidplay(StringfileName){rp.play(fileName);}}WindowsMediaPlayer.javapublicclassWindowsMediaPlayer{publicvoidplay(StringfileName){System.out.println(fileName+用WindowsMediaPlayer播放);}}RealPlayer.javapublicclassRealPlayer{publicvoidplay(StringfileName){System.out.println(fileName+用RealPlayer播放);};}XMLUtil.javaimportjavax.xml.parsers.*;9importorg.w3c.dom.*;importorg.xml.sax.SAXException;importjava.io.*;publicclassXMLUtil{//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象publicstaticObjectgetBean(){try{//创建DOM文档对象DocumentBuilderFactorydFactory=DocumentBuilderFactory.newInstance();DocumentBuilderbuilder=dFactory.newDocumentBuilder();Documentdoc;doc=builder.parse(newFile(src/config.xml));//获取包含类名的文本节点NodeListnl=doc.getElementsByTagName(className);NodeclassNode=nl.item(0).getFirstChild();StringcName=classNode.getNodeValue();//通过类名生成实例对象并将其返回Classc=Class.forName(cName);Objectobj=c.newInstance();returnobj;}c
本文标题:设计模式实验四
链接地址:https://www.777doc.com/doc-5187368 .html