首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

6.Java设计模式-----策略模式(Strategy Pattern)

  • 25-03-02 13:43
  • 2883
  • 11983
blog.csdn.net

什么是策略模式

       策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。   ----来自:百度百科

       策略模式,有两个不变:起点和终点不变,中途具体实现方式可以随机,只要从起点到了终点即可。

       即:过程不同,结果相同(可以说只关心结果,具体如何实现不管)     ------关心的是过程

结合现实情况了解策略模式

       1.我在北京,现在我得去上海出差。我可以选择①坐火车直达去  ②坐火车到天津,然后坐轮船去   ③坐飞机去  ④骑自行车(作死节奏)    有多种方式可以选择。

       2.现在我需要用现金,但是身上没有。我的目的就是要弄到现金。①我可以拿银行卡去ATM取   ②我可以拿银行卡去银行柜台取   ③我可以和朋友借现金    有很多方式,都可以获得想要的现金。

       由起点到终点,我要实现我的目标,中途的具体实现方法,即策略。

代码实现

  应用场景:

          现在有一个数组int[ ] arr = {13,34,23,34,687,1,3,64,766,2,98,34},我需要对它由小到大进行排序。

  实现:①Arrays.sort()实现    ②冒泡排序实现    ③快速排序实现    ④其他各种排序实现(插入排序、归并排序、希尔排序....等)。

  思想:使用策略不同,但结果都是将arr数组从小到大排序。

  1. //1.Arrays.sort()实现
  2. public class SortTest {
  3. public static void main(String[] args) {
  4. int[ ] arr = {13,34,23,34,687,1,3,64,766,2,98,34};
  5. Arrays.sort(arr);
  6. System.out.println(Arrays.toString(arr)); //输出:[1, 2, 3, 13, 23, 34, 34, 34, 64, 98, 687, 766]
  7. }
  8. }
  1. //2.冒泡排序实现
  2. public class BubbleSort {
  3. public static void main(String[] args) {
  4. int[] arr = {13,34,23,34,687,1,3,64,766,2,98,34};
  5. for(int i = 0;i
  6. for(int j = 0;j1-i;j++){
  7. if(arr[j]>arr[j+1]){
  8. int temp = arr[j];
  9. arr[j] = arr[j+1];
  10. arr[j+1] = temp;
  11. }
  12. }
  13. }
  14. System.out.println(Arrays.toString(arr));//输出:[1, 2, 3, 13, 23, 34, 34, 34, 64, 98, 687, 766]
  15. }
  16. }
  1. //3.快速排序(快排)实现
  2. public class QucikSort{
  3. public static void main(String[] args){
  4. int[] arr = {13,34,23,34,687,1,3,64,766,2,98,34};
  5. int[] finalArr = QuickSort(arr,0,arr.length-1);
  6. System.out.println(Arrays.toString(finalArr));//输出:[1, 2, 3, 13, 23, 34, 34, 34, 64, 98, 687, 766]
  7. }
  8. public static int[] QuickSort(int[] arr,int left,int right){
  9. //如果left>=right,则数组只有一个元素,直接返回
  10. if(left >= right){
  11. return null;
  12. }
  13. //获取数组开始下标
  14. int i = left;
  15. //获取数据结束下标
  16. int j = right;
  17. //获取最左边数为基准数
  18. int key = arr[left];
  19. while(i
  20. while(key<=arr[j] && i
  21. j--;
  22. }
  23. while(key>=arr[i] && i
  24. i++;
  25. }
  26. if(i
  27. int temp = arr[j];
  28. arr[j] = arr[i];
  29. arr[i] = temp;
  30. }
  31. }
  32. arr[left] = arr[i];
  33. arr[i] = key;
  34. QuickSort(arr,left,i-1);
  35. QuickSort(arr,i+1,right);
  36. return arr;
  37. }
  38. }

 

文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览148947 人正在系统学习中
注:本文转载自blog.csdn.net的扛麻袋的少年的文章"https://blog.csdn.net/lzb348110175/article/details/91633620"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top