您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 6.适配器模式-组合模式
10.适配器模式现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch的binarySearch(int[],int)方法实现了二分查找算法。现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中。绘制类图并编程实现。(要求实现快速排序和二分查找)1..11..11..11..1BinarySearch+binarySearch(intlist[],intnumber):intQuickSort+quickSort(intlist[]):intDataOperationAdapter++ImplementImplementsort(intlist[])search(intlist[],intnumber):void:intDataOperation++sort(intlist[])search(intlist[],intnumber):void:intinterfaceDataOperation{---;---;}classQuickSort{publicint[]quickSort(int[]num){returnsort(num,0,num.length-1);}privateint[]sort(int[]num,intleft,intright){if(leftright){//将第一个数作为参照轴ints=num[left];inti=left;intj=right+1;while(true){//从左向右找,直到找到比S大的数while(i+1num.length&&num[++i]s);//从右向左找,直到找到比S小的数while(j-1-1&&num[--j]s);//此时如果i=j,则说明已交叉,跳出该永久循环if(i=j){break;}//否则如果i=j,则交换下标为i和下标为j的两元素的值swap(num,i,j);}//把比S小的数放到下标为left处num[left]=num[j];//最后将轴S置于比它小和比它大的两组数之间num[j]=s;//对S的左右两侧分别再次使用快速排序sort(num,left,j-1);sort(num,j+1,right);}returnnum;}privatevoidswap(int[]num,inti,intj){intt;t=num[i];num[i]=num[j];num[j]=t;}}classBinarySearch{publicintbinarySearch(int[]num,intx){intlow=0;inthigh=num.length-1;while(low=high){//此时抛出ArrayIndexOutOfBoundsException异常..intmid=low+(high-low)/2;intmidVal=num[mid];if(xmidVal){low=mid+1;}elseif(xmidVal){high=mid-1;}else{returnmid;}}return-1;//没找到元素x}}---{QuickSortquickSort=newQuickSort();BinarySearchbinarySearch=newBinarySearch();@Overridepublicintsearch(int[]list,intnumber){return---;}@Overridepublicvoidsort(int[]list){---;}}classDataOperationClient{publicstaticvoidmain(Stringa[]){---;//适配器DataOperationAdapterint[]list={1,3,56,23,54,86,43,57,88,56,82,90};System.out.println(Listbeforesort:);for(inti=0;ilist.length;i++){System.out.print(list[i]+);}---;System.out.println(\nListaftersort:);for(inti=0;ilist.length;i++){System.out.print(list[i]+);}intnumber=43;intindex=---;System.out.println(\nSearchfor:+number+,Positionis:+index);}}运行结果:12.组合模式使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、图片文件ImageFile、音频视频文件MediaFile。绘制类图并编程实现。0..10..*Folder-fileName:String+++Implementdisplay()add(AbstractElementelement)delete(AbstractElementelement):void:void:voidTextFile-fileName:String+Implementdisplay():voidImageFile-fileName:String+Implementdisplay():voidMediaFile-fileName:String+Implementdisplay():voidAbstractElement+display():voidimportjava.util.ArrayList;interfaceAbstractElement{----;}classImageFileimplementsAbstractElement{----;publicImageFile(Stringfilename){----;}publicvoiddisplay(){System.out.println(Imagefile+filename+iskillingvirus!);}}classTextFileimplementsAbstractElement{----;publicTextFile(Stringfilename){----;}publicvoiddisplay(){System.out.println(Textfile+filename+iskillingvirus!);}}classMediaFileimplementsAbstractElement{----;publicMediaFile(Stringfilename){----;}publicvoiddisplay(){System.out.println(Mediafile+filename+iskillingvirus!);}}----{----;privateStringfilename;publicFolder(Stringfilename){----;}publicvoidadd(AbstractElementelement){----;}publicvoiddelete(AbstractElementelement){----;}publicvoiddisplay(){System.out.println(Folder+filename+iskillingvirus:);----{((AbstractElement)list.get(i)).display();}}}classAntiVirus{publicstaticvoidmain(Stringa[]){AbstractElemente1=newImageFile(LeeJunGee.gif);AbstractElemente2=newMediaFile(仙剑三.avi);AbstractElemente3=newTextFile(何以箫声默.txt);Folderfolder1=newFolder(LoveFiles);----;//将e1e2e3放入文件夹folder1----;----;AbstractElementtxt1=newTextFile(设计模式.txt);AbstractElementtxt2=newTextFile(Java程序设计.doc);Folderfolder2=newFolder(文档);----;//将txt1txt2放入文件夹folder2----;AbstractElemente5=newMediaFile(廊桥遗梦.avi);AbstractElemente6=newMediaFile(乱世佳人.avi);Folderfolder3=newFolder(JYY'sFiles);----;//将folder1folder2放入文件夹folder3----;----;//将e5e6放入文件夹folder3----;----;//folder3杀毒}}运行结果:folder3folder1folder2e5e6e1e2e3txt15txt25
本文标题:6.适配器模式-组合模式
链接地址:https://www.777doc.com/doc-2647796 .html