当前位置:文档之家› 6.适配器模式-组合模式

6.适配器模式-组合模式

10. 适配器模式现有一个接口DataOperation定义了排序方法sort(int[]) 和查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch(int[], int)方法实现了二分查找算法。

现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中。

绘制类图并编程实现。

(要求实现快速排序和二分查找)interface DataOperation{---;---;}class QuickSort{public int[] quickSort(int[] num){return sort(num,0,num.length-1);}private int[] sort(int[] num,int left,int right){if(left < right){//将第一个数作为参照轴int s = num[left];int i = left;int j = right+1;while(true){//从左向右找,直到找到比S大的数while(i+1<num.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);}return num;}private void swap(int[] num,int i,int j){int t;t = num[i];num[i] = num[j];num[j] = t;}}class BinarySearch{public int binarySearch(int[] num,int x){int low = 0;int high = num.length - 1;while(low <= high){//此时抛出ArrayIndexOutOfBoundsException 异常..int mid = low + (high - low)/2;int midVal = num[mid];if(x > midVal){low = mid + 1;}else if (x < midVal){high = mid - 1;}else{return mid;}}return -1; //没找到元素x}}---{QuickSort quickSort=new QuickSort();BinarySearch binarySearch =new BinarySearch();@Overridepublic int search(int[] list, int number) {return---;}@Overridepublic void sort(int[] list) {---;}}class DataOperationClient{public static void main(String a[]){---;//适配器DataOperationAdapterint[] list={1,3,56,23,54,86,43,57,88,56,82,90};System.out.println("List before sort: ");for(int i=0;i<list.length;i++){System.out.print(list[i]+" ");}---;System.out.println("\nList after sort: ");for(int i=0;i<list.length;i++){System.out.print(list[i]+" ");}int number=43;int index=---;System.out.println("\nSearch for: "+number+ ", Position is:"+index);}}运行结果:12. 组合模式使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、图片文件ImageFile、音频视频文件MediaFile。

绘制类图并编程实现。

import java.util.ArrayList;interface AbstractElement{----;}class ImageFile implements AbstractElement{----;public ImageFile(String filename){----;}public void display(){System.out.println("Image file " + filename + " is killing virus!");}}class TextFile implements AbstractElement{----;public TextFile(String filename){----;}public void display(){System.out.println("Text file "+ filename+ " is killing virus!");}}class MediaFile implements AbstractElement{----;public MediaFile(String filename){----;}public void display(){System.out.println("Media file " + filename + " is killingvirus!");}}----{----;private String filename;public Folder(String filename){----;}public void add(AbstractElement element){----;}public void delete(AbstractElement element){----;}public void display(){System.out.println("Folder "+ filename+ " is killing virus:");----{((AbstractElement)list.get(i)).display();}}}class AntiVirus{public static void main(String a[]){AbstractElement e1=new ImageFile("LeeJunGee.gif");AbstractElement e2=new MediaFile("仙剑三.avi");AbstractElement e3=new TextFile("何以箫声默.txt");Folder folder1=new Folder("LoveFiles");----;//将e1 e2 e3放入文件夹folder1----;----;AbstractElement txt1=new TextFile("设计模式.txt");AbstractElement txt2=new TextFile("Java程序设计.doc");Folder folder2=new Folder("文档");----; //将txt1 txt2放入文件夹folder2----;AbstractElement e5=new MediaFile("廊桥遗梦.avi");AbstractElement e6=new MediaFile("乱世佳人.avi");Folder folder3=new Folder("JYY's Files");----; //将folder1 folder2放入文件夹folder3----;----; //将e5 e6放入文件夹folder3----;----;// folder3杀毒}}folder3folder1 folder2 e5 e6 e1 e2 e3txt1txt2运行结果:。

相关主题