现有一个接口DataOperation定义了排序方法sort(int[]) 和查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch(int[], int)方法实现了二分查找算法。试使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中。绘制类图并编程实现。(要求实现快速排序和二分查找,使用对象适配器实现)
UML类图:
Java程序代码:
目标接口DataOperation
public interface DataOperation {
public int[] sort(int[]arr);
public int search(int[]arr,int x);
}
快速排序类QuickSort
public class QuickSort {
public int[] quickSort(int[]arr) {
sort(arr,0,arr.length-1);
return arr;
}
public void sort(int[]arr,int low,int high) {
int i,j,temp,t;
if(low>high) {
return ;
}
i = low;
j = high;
temp = arr[low];
while(i<j) {
while(temp<=arr[j] && i<j) {
j--;
}
while(temp>=arr[i] && i<j) {
i++;
}
if(i<j) {
t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
arr[low] = arr[i];
arr[i] = temp;
sort(arr,low,j-1);
sort(arr,j+1,high);
}
}
二分搜索类BinarySearch
public class BinarySearch {
public int binarySearch(int[]arr,int x) {
int low = 0;
int high = arr.length-1;
while(low<=high) {
int middle = (low + high)/2;
if(x == arr[middle]) {
return middle+1;
} else if(x<arr[middle]) {
high = middle - 1;
} else {
low = middle + 1;
}
}
return -1;
}
}
适配器类Adapter
public class Adapter implements DataOperation{
private QuickSort quicksort;
private BinarySearch binarysearch;
public Adapter(QuickSort quicksort,BinarySearch binarysearch) {
this.quicksort = quicksort;
this.binarysearch = binarysearch;
}
@Override
public int[] sort(int[] arr) {
return quicksort.quickSort(arr);
}
@Override
public int search(int[] arr, int x) {
return binarysearch.binarySearch(arr, x);
}
}
Client客户端
public class Client {
public static void main(String[] args) {
int[] arr = {10,7,2,4,7,62,3,4,6,1,9,0,23};
QuickSort q = new QuickSort();
BinarySearch b = new BinarySearch();
DataOperation d = new Adapter(q, b);
d.sort(arr);
System.out.println(d.search(arr,23));
}
}
运行结果:
TestCase:搜索数组中值为23的索引: