1、定义
定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。
策略模式让算法的变化不会影响到使用算法的客户。
策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。
2、Comparable、Comparator接口
Comparable & Comparator 都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。
Comparator位于包java.util下,而Comparable位于包 java.lang下
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
实现Dog的List的排序:
方法一:Dog类实现Comparable接口
public class Person implements Comparable<Person> {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person another) {
int i = 0;
// 先按名字进行比较
i = name.compareTo(another.name);
// 若名字相同,则比较年龄
if (i == 0) {
return age - another.age;
} else {
return i;
}
}
}
List<Person> list = new ArrayList<>();
// 按Comparable的compareTo方法比较排序
Collections.sort(list);
方法二:实现一个比较器Comparator
Comparator<Person> comparator = new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
int i = 0;
i = o1.name.compareTo(o2.name);
if (i == 0) {
return o1.age - o2.age;
} else {
return i;
}
}
};
List<Person> list = new ArrayList<>();
// 根据比较器的定义排序
Collections.sort(list, comparator);
比较两个对象,实现Comparable或者Comparator接口,可以根据情况指定比较的属性,即制定不同的策略。