@Test
public void test() {
List<Integer> list = new ArrayList<>();
list.add(100);
list.add(25);
list.add(360);
list.add(44);
list.add(97);
Comparator<Integer> descComparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1; // 降序
}
};
// 根据descComparator对象中定义的算法排序list
Collections.sort(list, descComparator);
System.out.println(list);
Comparator<Integer> ascComparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2; // 升序
}
};
// 根据ascComparator对象中定义的算法排序list
Collections.sort(list, ascComparator);
System.out.println(list);
}
执行以上测试代码,控制台输出如下:
[360, 100, 97, 44, 25]
[25, 44, 97, 100, 360]
像java.util.Collections.sort(java.util.List<T>, java.util.Comparator<? super T>)方法这样,创建一个能够根据所传递的参数对象的不同而具有不同行为的方法,被称为策略设计模式。这类方法包含所要执行的算法中固定不变的部分,而“策略”包含变化的部分。策略就是传递进去的参数对象,它包含要执行的代码。
在上述代码中,ascComparator和descComparator两个对象就是策略。java.util.Collections.sort(java.util.List<T>, java.util.Comparator<? super T>)包含所有执行的算法中固定不变的部分。