一起学java设计模式--适配器模式(结构型模式)

来源:互联网 发布:论文spss数据分析例子 编辑:程序博客网 时间:2024/05/14 22:53

适配器模式

现有一个接口DataOperation定义了排序方法sort(int[]) 查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch(int[], int)方法实现了二分查找算法。现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中。绘制类图并编程实现。 (要求实现快速排序和二分查找)

编码实现:

interface DataOperation{void sort(int[] list);int search(int[] list, int number);}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}}class DataOperationAdpter implements DataOperations{QuickSort quickSort=new QuickSort();BinarySearch binarySearch =new BinarySearch();@Overridepublic int search(int[] list, int number) {return binarySearch.binarySearch(list, number);}@Overridepublic void sort(int[] list) {quickSort.quickSort(list); }}class DataOperationClient{public static void main(String a[]){  //适配器 DataOperationAdapterDataOperation dataAdpter = new DataOperationAdpter();int[] list={1,3,56,23,54,86,43,57,88,56,82,90};System.out.println("排序前的数据: ");for(int i=0;i<list.length;i++){System.out.print(list[i]+"    ");} dataAdpter.sort(list);System.out.println("\n排序后的数据: ");for(int i=0;i<list.length;i++){System.out.print(list[i]+"    ");}int number = 56;int index = dataAdpter.search(list, number);System.out.println("\n要查找的数据: "+number+ ", 所在下标:"+index);}

运行结果:


0 0
原创粉丝点击