策略模式:定义一组算法,将每个算法都封装起来,并且使他们之间能够调换

简略点了解为定义公共办法,调用公共办法

public class Person {    private int age;    private int num;    public Person(int age, int name) {        this.age = age;        this.num = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public int getNum() {        return num;    }    public void setNum(int name) {        this.num = name;    }}
//定义公共办法@FunctionalInterfacepublic interface Comparator<T> {    int compareTo(T o1,T o2);}
//调用时应用接口public class Sorter<T> {    public void sort(T[] arr, Comparator<T> comparator) {        //冒泡排序        for (int i = 0; i < arr.length - 1; i++) {            int pos = i;            for (int j = i + 1; j < arr.length; j++) {                pos = comparator.compareTo(arr[j], arr[pos]) == -1 ? j : pos;            }            swap(arr, i, pos);        }    }    void swap(T[] arr, int i, int j) {        T temp = arr[i];        arr[i] = arr[j];        arr[j] = temp;    }}
//main办法,对于不同策略只须要实现comparator接口就行public class Main {    public static void main(String[] args) {        Person[] arr = {new Person(20, 3), new Person(19, 1), new Person(21, 2)};        Sorter<Person> sorter = new Sorter<>();        //按年龄排序        sorter.sort(arr, (o1, o2) -> {            if (o1.getAge() > o2.getAge()) {                return 1;            } else if (o1.getAge() < o2.getAge()) {                return -1;            } else {                return 0;            }        });        //按num排序        sorter.sort(arr, (o1, o2) -> {            if (o1.getNum() > o2.getNum()) {                return 1;            } else if (o1.getNum() < o2.getNum()) {                return -1;            } else {                return 0;            }        });        //由此可见,策略模式能够随便扩大,只有实现对应接口就行    }}