题目:现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch的binarySearch(int[],int)方法实现了二分查找算法。现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中。绘制类图并编程实现。
类图
代码
package 适配器模式实例之算法适配;
public interface DataOperation { //目标类
public void sort(int sort[], int i, int j);
public int search(int search[], int n);
}
package 适配器模式实例之算法适配;
public class AlgotithmAdapter implements DataOperation{ //适配器类
private QuickSort quick;
private BinarySearch binary;
public AlgotithmAdapter(QuickSort quick) {
this.quick = quick;
}
public AlgotithmAdapter(BinarySearch binary) {
this.binary = binary;
}
public void sort(int sort[], int i, int j) {
quick.quickSort(sort, i, j);
}
public int search(int search[], int n) {
return binary.binarySearch(search, n);
}
}
package 适配器模式实例之算法适配;
public class QuickSort { //适配者类
//划分数组
int partion(int array[], int p, int r) {
int x = array[r];
int i = p - 1;//注意这点,把i设成负值,然后作为移动的标志
int j;
for (j = p; j < r; j++) {
if (array[j] <= x) {
i++;
int temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
int temp = array[j];
array[j] = array[i + 1];
array[i + 1] = temp;
return i+1;//返回的应该是交换后的哨兵的位置
}
//递归解决每个划分后的小数组
void quickSort(int[] array, int p, int r) {
if (p < r) {
int q = partion(array, p, r);
quickSort(array, p, q - 1);
quickSort(array, q + 1, r);
}
}
}package 适配器模式实例之算法适配;
public class BinarySearch { //适配者类
public int binarySearch(int[] srcArray, int des){
int low = 0;
int high = srcArray.length-1;
while(low <= high) {
int middle = (low + high)/2;
if(des == srcArray[middle]) {
return middle;
}else if(des <srcArray[middle]) {
high = middle - 1;
}else {
low = middle + 1;
}
}
return -1;
}
} package 适配器模式实例之算法适配;
public class Client { //客户端类
public static void main(String[] args) {
int[] array = { 4, 3, 5, 2, 3, 6, 8, 9, 18, 12, 53, 20};
int i;
System.out.print("排序前:");
for (i=0; i<array.length; i++)
System.out.print(array[i]+" ");
BinarySearch binary = new BinarySearch();
AlgotithmAdapter algotithm1 = new AlgotithmAdapter(binary);
System.out.println("\n通过二分查找得到数字5:位于数组的第"+(algotithm1.search(array, 5)+1)+"位");
QuickSort sort = new QuickSort();
AlgotithmAdapter algotithm2 = new AlgotithmAdapter(sort);
algotithm2.sort(array, 0, array.length - 1);
System.out.println("------------------------------");
System.out.print("排序后:");
for (i=0; i<array.length; i++)
System.out.print(array[i]+" ");
//int[] src = new int[] {1, 3, 5, 7, 8, 9};
System.out.println("\n通过二分查找得到数字5:位于数组的第"+(algotithm1.search(array, 5)+1)+"位");
}
}
运行效果图
本文通过实例介绍了如何使用对象适配器模式将QuickSort和BinarySearch的算法适配到DataOperation接口,无需修改原有源代码,详细阐述了适配器的设计和实现过程。
767

被折叠的 条评论
为什么被折叠?



