策略模式
这种模式属于行为型模式, 他调整了方法的合理调用
策略模式将具体类和具体功能分开 使用组合的方式进行关联 这样减小了耦合 和代码冗余
状态模式是将不同状态以不同对象的形式展示 策略模式是将不同实现的方式以对象的形式展示
角色 :
Context上下文(具体类) : 用于封装策略对象
策略接口 : 抽象策略规则
具体策略角色(具体功能) : 策略的具体实现
以Arrays工具类的sort方法分析
//这个相当于具体类
//通过传入不同的c来实现不同的具体方法(策略)
public static <T> void sort(T[] a, Comparator<? super T> c) {
if (c == null) {
sort(a);
} else {
if (LegacyMergeSort.userRequested)
legacyMergeSort(a, c);
else
TimSort.sort(a, 0, a.length, c, null, 0, 0);
}
}
String[] arr = new String[]{"1","2","3"};
Integer[] arr2 = new Integer[]{1,2,3};
//通过不同类的compareTo方法 来实现策略模式 (String实现的CompareTo 和 Integer实现的CompareTo是不同的具体实现)
Arrays.sort(arr, String::compareTo);
Arrays.sort(arr2,Integer::compareTo);