什么是策略模式
策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。 ----来自:百度百科
策略模式,有两个不变:起点和终点不变,中途具体实现方式可以随机,只要从起点到了终点即可。
即:过程不同,结果相同(可以说只关心结果,具体如何实现不管) ------关心的是过程
结合现实情况了解策略模式
1.我在北京,现在我得去上海出差。我可以选择①坐火车直达去 ②坐火车到天津,然后坐轮船去 ③坐飞机去 ④骑自行车(作死节奏) 有多种方式可以选择。
2.现在我需要用现金,但是身上没有。我的目的就是要弄到现金。①我可以拿银行卡去ATM取 ②我可以拿银行卡去银行柜台取 ③我可以和朋友借现金 有很多方式,都可以获得想要的现金。
由起点到终点,我要实现我的目标,中途的具体实现方法,即策略。
代码实现
应用场景:
现在有一个数组int[ ] arr = {13,34,23,34,687,1,3,64,766,2,98,34},我需要对它由小到大进行排序。
实现:①Arrays.sort()实现 ②冒泡排序实现 ③快速排序实现 ④其他各种排序实现(插入排序、归并排序、希尔排序....等)。
思想:使用策略不同,但结果都是将arr数组从小到大排序。
//1.Arrays.sort()实现
public class SortTest {
public static void main(String[] args) {
int[ ] arr = {13,34,23,34,687,1,3,64,766,2,98,34};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); //输出:[1, 2, 3, 13, 23, 34, 34, 34, 64, 98, 687, 766]
}
}
//2.冒泡排序实现
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {13,34,23,34,687,1,3,64,766,2,98,34};
for(int i = 0;i<arr.length;i++){
for(int j = 0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));//输出:[1, 2, 3, 13, 23, 34, 34, 34, 64, 98, 687, 766]
}
}
//3.快速排序(快排)实现
public class QucikSort{
public static void main(String[] args){
int[] arr = {13,34,23,34,687,1,3,64,766,2,98,34};
int[] finalArr = QuickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(finalArr));//输出:[1, 2, 3, 13, 23, 34, 34, 34, 64, 98, 687, 766]
}
public static int[] QuickSort(int[] arr,int left,int right){
//如果left>=right,则数组只有一个元素,直接返回
if(left >= right){
return null;
}
//获取数组开始下标
int i = left;
//获取数据结束下标
int j = right;
//获取最左边数为基准数
int key = arr[left];
while(i<j){
while(key<=arr[j] && i<j){
j--;
}
while(key>=arr[i] && i<j){
i++;
}
if(i<j){
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
arr[left] = arr[i];
arr[i] = key;
QuickSort(arr,left,i-1);
QuickSort(arr,i+1,right);
return arr;
}
}