什么是策略模式
策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。 ----来自:百度百科
策略模式,有两个不变:起点和终点不变,中途具体实现方式可以随机,只要从起点到了终点即可。
即:过程不同,结果相同(可以说只关心结果,具体如何实现不管) ------关心的是过程
结合现实情况了解策略模式
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
- for(int j = 0;j
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
- while(key<=arr[j] && i
- j--;
- }
- while(key>=arr[i] && i
- i++;
- }
- if(i
- 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;
- }
- }
注:本文转载自blog.csdn.net的扛麻袋的少年的文章"https://blog.csdn.net/lzb348110175/article/details/91633620"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
评论记录:
回复评论: