开闭原则:对修改关闭 对扩展开放
Java中典型的策略模式:比较器comparator
策略模式封装的是执行一种方法的不同模式、策略
策略模式的典型实现就是比较器。下面来看一下代码
首先需要定义一个策略接口,通常该接口为功能接口,即只有一个抽象方法
public interface Comparator<T> { int compare(T o1,T o2); }
接着定义一个Dog类,用于测试
public class Dog { public int weight; }
定义排序器,后续在代码中可以考虑使用lambda来简化,这里使用最基础的方式,写一个类实现接口
public class DogComparator implements Comparator<Dog>{ @Override public int compare(Dog o1, Dog o2) { if (o1.weight < o2.weight) return -1; else if (o1.weight > o2.weight) return 1; return 0; } }
定义一个排序类
public class Sorter<T> { public void sort(T[] arr, Comparator<T> comparator) { for (int i = 0; i < arr.length - 1; i++) { int minPos = i; for (int j = i + 1; j < arr.length; j++) { //这里使用排序器的比较方法来进行比较 minPos = comparator.compare(arr[j], arr[minPos]) == -1 ? j : minPos; } T c = arr[i]; arr[i] = arr[minPos]; arr[minPos] = c; } } }
最后,在main方法中,完成调用测试
public class Main { public static void main(String[] args) { Dog[] a = {new Dog(1),new Dog(5),new Dog(2),new Dog(3)}; Sorter<Dog> sorter = new Sorter<>(); sorter.sort(a, new DogComparator()); System.out.println(Arrays.toString(a)); } }