为了实现代码的可读性、可扩展性等,在不同层面对实现逻辑的抽象与封装。
举个例子:快速排序
public class Main {
public static void main(String[] args) {
int[] arr = new int[]{12,3,1,4,5};
quickSort(arr);
printArr(arr);
}
private static void quickSort(int[] arr) {
Objects.requireNonNull(arr);
process(arr, 0, arr.length - 1);
}
private static void process(int[] arr, int left, int right) {
if(left < right){
int random = left + (int)(Math.random() * (right - left + 1));
swap(arr, random, right);
int mid = partition(arr, left, right);
process(arr, left, mid - 1);
process(arr, mid + 1, right);
}
}
private static int partition(int[] arr, int left, int right) {
int index = left;
int pivot = left - 1;
while (index <= right){
if(arr[index]<= arr[right]){
swap(arr, index, ++pivot);
}
index ++;
}
return pivot;
}
private static void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
private static void printArr(int[] arr) {
Objects.requireNonNull(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
quickSort(int[] arr)
对指定数组排序,参数为arr。具体实现委托给process(arr, 0, arr.length - 1)-
process(int[] arr, int left, int right)
对arr指定的范围进行排序,参数为arr left right,更通用。
从实现来看,包含如下子过程:- 获取随机下标
- 与right位置交换
- 数组的partition调整
- 递归左、递归右
结论
每一个方法都实现了一个特定的功能,即只做一件事。只不过这件“事”根据处理逻辑的不同却有很大差异:可以是一个独立的基础操作;也可以是一系列操作的组合。但在当前抽象层面就实现了一个特定功能。