1. 什么是策略模式

策略模式定义了一系列算法, 并将每一个算法封装起来, 而且使他们还可以相互替换. 策略模式让算法独立于使用它的客户而独立变化

  • 说白了策略模式就是让使用与算法隔离

2. 策略模式中的角色

  1. 策略的抽象
  2. 策略的实现
  3. 操作策略的上下文

3. 用代码来写个例子

  1. 策略的抽象

    1. public interface Strategy {
    2. void 防守策略();
    3. }
  2. 策略的实现 ```java public class FantasyStrategy implements Strategy { @Override public void 防守策略() {

    1. System.out.println("释放♂fantasy");

    } }

public class WrestleStrategy implements Strategy { @Override public void 防守策略() { System.out.println(“摔跤放手”); } }

  1. 3. 上下文
  2. ```java
  3. @AllArgsConstructor
  4. public class Context {
  5. private Strategy strategy;
  6. public void 敌人来袭() {
  7. System.out.println("发现敌袭");
  8. strategy.防守策略();
  9. System.out.println("防守结束");
  10. }
  11. }

使用

  1. public static void main(String[] args) {
  2. Context context = new Context(new WrestleStrategy());
  3. context.敌人来袭();
  4. }

看看结果:
image.png

4. JDK中是如何使用策略模式的


排序算法如何使用JDK已经帮忙我们处理得非常好了

但真正排序的时候, 不可能只针对int型的基础类型排序

JDK需要知道我们排序的元素之间的大小是如何比较的

但这时候我们的元素并没有写出来, 于是JDK就提供了一个接口 Comparator

让我们在写元素的时候再去定义如何比大小

使用

先定义一个POJO

  1. @Data
  2. @AllArgsConstructor
  3. public class POJO {
  4. private int i;
  5. }

再对其排序

  1. public static void main(String[] args) {
  2. List<POJO> list = new ArrayList<>();
  3. list.add(new POJO(1));
  4. list.add(new POJO(6));
  5. list.add(new POJO(21));
  6. list.add(new POJO(2));
  7. list.add(new POJO(3));
  8. list.add(new POJO(1));
  9. list.sort(new Comparator<POJO>() {
  10. @Override
  11. public int compare(POJO o1, POJO o2) {
  12. //1. 返回负数表示o1小
  13. //2. 返回0表示o1==o2
  14. //3. 返回正数表示o1大
  15. //JDK排序默认从小到大排序
  16. return o1.getI() - o2.getI();
  17. }
  18. });
  19. System.out.println(list);
  20. }
  • Comparator在使用的时候把比较大小的规则告诉sort()函数就能正确排序