策略模式针对一组算法。定义一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们之间可以相互替换。
策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。
【解释:跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,单目的都是为了得到MM的芳心,我的追MM锦囊中有好多Strategy哦。】
public interface Comparable{ int compareTo(T o); } public class Cat implements Comparable { int weight, height; public Cat(int weight, int height) { this.weight = weight; this.height = height; } public int compareTo(Cat c) { if(this.weight < c.weight) return -1; else if(this.weight > c.weight) return 1; else return 0; } @Override public String toString() { return "Cat{" + "weight=" + weight + ", height=" + height + '}'; } } //比较器 @FunctionalInterface public interface Comparator { int compare(T o1, T o2); default void m() { System.out.println("m"); } } public class CatHeightComparator implements Comparator { @Override public int compare(Cat o1, Cat o2) { if(o1.height > o2.height) return -1; else if (o1.height < o2.height) return 1; else return 0; } } public class CatWeightComparator implements Comparator { @Override public int compare(Cat o1, Cat o2) { if(o1.weight < o2.weight) return -1; else if (o1.weight > o2.weight) return 1; else return 0; } } public class Sorter { public void sort(T[] arr, Comparator comparator) { for(int i=0; i sorter = new Sorter<>();//排序方法 sorter.sort(a, (o1, o2)->{ if(o1.weight < o2.weight) return -1; else if (o1.weight>o2.weight) return 1; else return 0; }); System.out.println(Arrays.toString(a)); } }



