设计模式(二)策略模式
2021/5/30 18:24:11
本文主要是介绍设计模式(二)策略模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
设计模式(二)策略模式
策略模式(strategy)
原理
封装的是一个接口(策略)的实现
常见应用
Compartor接口就是我们常用的策略
代码示例
-
client代码
public class Sorter<T> { public void sort(T[] arr, Comparator<T> comparator) { for(int i=0; i<arr.length - 1; i++) { int minPos = i; for(int j=i+1; j<arr.length; j++) { minPos = comparator.compare(arr[j],arr[minPos])==-1 ? j : minPos; } swap(arr, i, minPos); } } //sort(int) void swap(T[] arr, int i, int j) { T temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } }
-
Compartor接口(自定义)
@FunctionalInterface public interface Comparator<T> { int compare(T o1, T o2); default void m() { System.out.println("m"); } }
-
Compartor实现
public class CatHeightComparator implements Comparator<Cat> { @Override public int compare(Cat o1, Cat o2) { if(o1.height > o2.height) return -1; else if (o1.height < o2.height) return 1; else return 0; } }
-
测试方法
public class Main { public static void main(String[] args) { //int[] a = {9, 2, 3, 5, 7, 1, 4}; Cat[] a = {new Cat(3, 3), new Cat(5, 5), new Cat(1, 1)}; //Dog[] a = {new Dog(3), new Dog(5), new Dog(1)}; Sorter<Cat> sorter = new Sorter<>(); sorter.sort(a, (o1, o2)->{ if(o1.weight < o2.weight) return -1; else if (o1.weight>o2.weight) return 1; else return 0; }); System.out.println(Arrays.toString(a)); } }
-
关键点在于
需要定义一个新的排序只需要新建一个排序策略并传入比较算法中即可
对修改关闭,对扩展开放
知识点
-
策略模式可以理解为switch的一种封装
-
函数式接口:只有一个实现方法的接口 @FunctionalInterface
这篇关于设计模式(二)策略模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器
- 2024-11-26Java云原生资料:新手入门教程与实战指南
- 2024-11-26JAVA云原生资料入门教程
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程