策略模式
一个类或者算法可以在运行时更改,实现这种功能的方式/方法就称为策略模式。
1.使用步骤
- 定义策略接口
- 定义使用策略的客户端类
- 定义具体的策略类
2.举例
定义策略接口:
java
public interface Comparator {
public int compare(Cat o1, Cat o2);
}
定义使用策略的客户端类:
java
public class Sort {
public static <T> void quickSort(Cat[] arr , int l, int r, Comparator comparator){
if(l>=r) {return;}
int i = l-1, j = r+1;
Cat t = arr[(r+l) >> 1];
while (i<j){
do {++i;}while (comparator.compare(arr[i], t) < 0);
do{--j;}while (comparator.compare(arr[j], t) > 0);
if(i<j) {swap(arr, i, j); }
}
quickSort(arr, l, j,comparator);
quickSort(arr, j+1,r,comparator);
}
private static void swap(Cat[] t, int i, int j){
Cat temp = t[i];
t[i] = t[j];
t[j] = temp;
}
}
定义具体的策略类:
java
public class ComparatorStrategy1 implements Comparator{
@Override
public int compare(Cat o1, Cat o2) {
if(o1.getWeight()>o2.getWeight()){
return 1;
}else if(o1.getWeight()<o2.getWeight()){
return -1;
}
return 0;
}
}
优点:
- 算法可以自由切换。
- 避免使用多重条件判断。
- 扩展性良好。
缺点: - 策略类会增多(通常使用匿名内部类)
- 所有策略类都需要对外暴露。
总结:在Java排序Arrays.sort就使用到了该种策略模式。此种方式可以使用泛型的方式来进行优化代码。来试试吧!!!