為了實現(xiàn)代碼的可讀性、可擴展性等,在不同層面對實現(xiàn)邏輯的抽象與封裝。
舉個例子:快速排序
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)
對指定數(shù)組排序,參數(shù)為arr。具體實現(xiàn)委托給process(arr, 0, arr.length - 1)-
process(int[] arr, int left, int right)
對arr指定的范圍進行排序,參數(shù)為arr left right,更通用。
從實現(xiàn)來看,包含如下子過程:- 獲取隨機下標
- 與right位置交換
- 數(shù)組的partition調(diào)整
- 遞歸左、遞歸右
結(jié)論
每一個方法都實現(xiàn)了一個特定的功能,即只做一件事。只不過這件“事”根據(jù)處理邏輯的不同卻有很大差異:可以是一個獨立的基礎操作;也可以是一系列操作的組合。但在當前抽象層面就實現(xiàn)了一個特定功能。