结构型模式之对象适配器模式(算法适配)

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

类图

结构型模式之对象适配器模式(算法适配)_第1张图片

代码

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 
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
运行效果图

结构型模式之对象适配器模式(算法适配)_第2张图片

你可能感兴趣的:(设计模式)