如何理解一个Java方法只做一件事?

为了实现代码的可读性、可扩展性等,在不同层面对实现逻辑的抽象与封装。

举个例子:快速排序

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,更通用。
    从实现来看,包含如下子过程:

    1. 获取随机下标
    2. 与right位置交换
    3. 数组的partition调整
    4. 递归左、递归右

结论

每一个方法都实现了一个特定的功能,即只做一件事。只不过这件“事”根据处理逻辑的不同却有很大差异:可以是一个独立的基础操作;也可以是一系列操作的组合。但在当前抽象层面就实现了一个特定功能。

你可能感兴趣的:(如何理解一个Java方法只做一件事?)