一、适配器模式
1、适配器模式包含的4个角色:(1)目标抽象类定义客户要用的特定的领域的接口(此接口是符合用户需求的);(2)适配器类(核心角色);(3)适配者类,该类已经存在一个接口,但这接口不符合用户需求,需要被适配;(4)客户类,用于编程,实现调用目标抽象类中定义的业务方法。
2、适配器模式适用的范围:系统需要使用现有的类,而这些类的接口不符合系统的需要;想建立一个可以重复使用的类,用于一些彼此之间没有太大关联的一些类一起工作。
3、实例讲解:
题目:现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[], int),已知类QuickSort(int[])方法实现了快速排序算法,类BinarySearch的binarySearch(int[], int)方法实现了二分查找算法。现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中。绘制类图并且编程实现。
1)适配器模式实验。
(1)通过分析实验内容,该实例类图如图1所示。
(2)创建目标接口类DataOperation,该接口定义了排序方法sort(int[])和查找方法search(int[], int),客户端中调用DataOperation中的sort()和search()方法,实现对数字排序和查找。代码如下:
public interface DataOperation {
void sort(int[] n);
int search(int[] arr, int key);
}
(3)适配器者QuickSort(快速排序类),代码如下:
public class QuickSort {
public void quickSork(int[] n, int left, int right){
int dp;
if (left < right) {
dp = partition(n, left, right);
quickSork(n, left, dp - 1);//递归调用
quickSork(n, dp + 1, right);
}
}
int partition(int n[], int left, int right) {
int pivot = n[left];
while (left < right) {
while (left < right && n[right] >= pivot)
right--;
if (left < right)
n[left++] = n[right];
while (left < right && n[left] <= pivot)
left++;
if (left < right)
n[right--] = n[left];
}
n[left] = pivot;
return left;
}
}
(4)适配器者BinarySearch(二分法查找类),代码如下:
public class BinarySearch {
public int binarySearch(int