1 策略模式的主要角色

抽象策略(Strategy)接口(抽象类)

定义了一个接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。

具体策略(Concrete Strategy)类

实现了抽象策略接口(0抽象类),提供具体的方法实现。

环境(Context)类

持有一个策略类的引用,最终给客户端调用。

2 策略模式的结构图

image.png

3 举例: java.util.Comparator

  1. //定义一个比较策略接口(抽象策略)
  2. public interface Comparator<T> {
  3. int compare(T o1, T o2);
  4. }
  5. //不同的策略实现策略接口(具体的策略)
  6. public class ConcreteComparator<T> implements Comparator<T>{
  7. @Override
  8. int compare(T o1, T o2){
  9. return o1-o2;
  10. }
  11. }
  12. //调用策略的类
  13. public class SortUtil{
  14. public static void sort(T[] arr,Comparator<T>){
  15. if(arr==null||arr.length<2){
  16. return;
  17. }
  18. for(int i=0;i<arr.length;i++){
  19. }
  20. }
  21. }