1. 什么是策略模式
策略模式定义了一系列算法, 并将每一个算法封装起来, 而且使他们还可以相互替换. 策略模式让算法独立于使用它的客户而独立变化
- 说白了策略模式就是让使用与算法隔离
2. 策略模式中的角色
- 策略的抽象
- 策略的实现
- 操作策略的上下文
3. 用代码来写个例子
策略的抽象
public interface Strategy {
void 防守策略();
}
策略的实现 ```java public class FantasyStrategy implements Strategy { @Override public void 防守策略() {
System.out.println("释放♂fantasy");
} }
public class WrestleStrategy implements Strategy { @Override public void 防守策略() { System.out.println(“摔跤放手”); } }
3. 上下文
```java
@AllArgsConstructor
public class Context {
private Strategy strategy;
public void 敌人来袭() {
System.out.println("发现敌袭");
strategy.防守策略();
System.out.println("防守结束");
}
}
使用
public static void main(String[] args) {
Context context = new Context(new WrestleStrategy());
context.敌人来袭();
}
看看结果:
4. JDK中是如何使用策略模式的
排序算法如何使用JDK已经帮忙我们处理得非常好了
但真正排序的时候, 不可能只针对int型的基础类型排序
JDK需要知道我们排序的元素之间的大小是如何比较的
但这时候我们的元素并没有写出来, 于是JDK就提供了一个接口 Comparator
让我们在写元素的时候再去定义如何比大小
使用
先定义一个POJO
@Data
@AllArgsConstructor
public class POJO {
private int i;
}
再对其排序
public static void main(String[] args) {
List<POJO> list = new ArrayList<>();
list.add(new POJO(1));
list.add(new POJO(6));
list.add(new POJO(21));
list.add(new POJO(2));
list.add(new POJO(3));
list.add(new POJO(1));
list.sort(new Comparator<POJO>() {
@Override
public int compare(POJO o1, POJO o2) {
//1. 返回负数表示o1小
//2. 返回0表示o1==o2
//3. 返回正数表示o1大
//JDK排序默认从小到大排序
return o1.getI() - o2.getI();
}
});
System.out.println(list);
}
Comparator
在使用的时候把比较大小的规则告诉sort()
函数就能正确排序