首先来看一个比较常用的比较器Comparator 接口,我们看到的一个大家常用的compare()方法,就是一个策略抽象实现:
Comparator 抽象下面有非常多的实现类,我们经常会把Comparator 作为参数传入作为排序策略,例如Arrays 类的parallelSort 方法等:
还有TreeMap 的构造方法:
是Comparator 在JDK 源码中的应用。那我们来看策略模式在Spring 源码中的应用,来看Resource 类:package org.springframework.core.
我们虽然没有直接使用Resource 类,但是我们经常使用它的子类,例如:
还有一个非常典型的场景,Spring 的初始化也采用了策略模式,不同的类型的类采用不同的初始化策略。首先有一个InstantiationStrategy 接口,我们来看一下源码:
顶层的策略抽象非常简单,但是它下面有两种策略SimpleInstantiationStrategy 和CglibSubclassingInstantiationStrategy,我们看一下类图:
打开类图我们还发现CglibSubclassingInstantiationStrategy 策略类还继承了SimpleInstantiationStrategy 类,说明在实际应用中多种策略之间还可以继承使用。小伙们可以作为一个参考,在实际业务场景中,可以根据需要来设计。