策略模式

策略模式:定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。

/**
 * 排序类
 * @param <T>
 */
public class Sort<T> {

    /**
     * 排序算法
     * @param arr 需要排序的数组
     * @param comparator 比较器
     */
    public void sort(T[] arr, Comparator<T> comparator){
        if (arr.length <= 1) return;
        for (int i = 0; i < arr.length - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (comparator.compare(arr[j], arr[minIndex]) < 0) {
                    minIndex = j;
                }
            }
            T temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
    }

    public static void main(String[] args) {
        Cat[] arr = {new Cat(1,2), new Cat(4,3), new Cat(3, 2)};
        Sort<Cat> catSort = new Sort<>();
        // 这里的比较器就是一种策略
        catSort.sort(arr, new Comparator<Cat>() {
            @Override
            public int compare(Cat o1, Cat o2) {
                return o1.age - o2.age;
            }
        });
        for (Cat cat : arr) {
            System.out.println(cat);
        }
    }

    @Data
    private static class Cat {
        int age;
        int weight;
        public Cat(int age, int weight) {
            this.age = age;
            this.weight = weight;
        }
    }
}

 

posted @ 2021-04-21 13:51  一柒微笑  阅读(44)  评论(0编辑  收藏  举报