通过自定义的方式,完成一件事。

参考JDK源码中的Comparator接口,自定义MyComparator接口,以及编写排序算法,通过实现不同的比较器(MyComparator接口的实现类),完成自定义排序功能。

这就是策略模式的一种简单实现。

代码结构
Java设计模式:策略模式_自定义
源码

package com.myspringboot.shejimoshi.celue;

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        User[] arr = {new User(1, 19), new User(3, 20), new User(2, 18)};
        //通过id排序
        Sorter.sort(arr, (o1, o2) -> o1.getId() - o2.getId());
        System.out.println(Arrays.toString(arr));
        //通过age排序
        Sorter.sort(arr, (o1, o2) -> o1.getAge() - o2.getAge());
        System.out.println(Arrays.toString(arr));
    }
}
package com.myspringboot.shejimoshi.celue;

public interface MyComparator<T> {
    int compare(T o1, T o2);
}
package com.myspringboot.shejimoshi.celue;

public class Sorter {
    public static <T> void sort(T[] arr, MyComparator<? super T> comparator) {
        for (int i = 1; i < arr.length; i++) {
            for (int j = i; j > 0 && comparator.compare(arr[j - 1], arr[j]) > 0; j--) {
                swap(arr, j, j - 1);
            }
        }
    }

    private static <T> void swap(T[] arr, int i, int j) {
        T temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}
package com.myspringboot.shejimoshi.celue;

public class User {
    private int id;
    private int age;

    public User(int id, int age) {
        this.id = id;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", age=" + age +
                '}';
    }
}