设计模式-策略模式

发布时间 2023-10-01 22:32:14作者: 欢乐豆123

设计模式-策略模式

1.  涉及的角色
1)Strategy(策略)
Strategy角色负责决定实现策略所必需的接口(API)。在示例程序中,由strategy接口扮演此角色。

2)ConcreteStrategy(具体的策略)
ConcreteStrategy角色负责实现Strategy角色的接口(API),即负责实现具体的策略(战略、方向、 方法和算法)。

3)Context(上下文)
context负责使用Strategy角色。Context角色保存了ConcreteStrategy角色的实例,并使用ConcreteStrategy角色去实现需求
(总之,还是要调用Strategy角色的接口(API))

2. 使用场景
在Java中,比较器接口Comparator就是一个常见的策略模式实践
 1     public static <T> void sort(T[] a, Comparator<? super T> c) {
 2         if (c == null) {
 3             sort(a);
 4         } else {
 5             if (LegacyMergeSort.userRequested)
 6                 legacyMergeSort(a, c);
 7             else
 8                 TimSort.sort(a, 0, a.length, c, null, 0, 0);
 9         }
10     }

比如 Arrays.sort(numbers, new ReverseComparator());它允许我们传入一个Comparator实例来指定我们想要的策略
1 public class ReverseComparator implements Comparator{
2   public int compare(String s1, String s2) {
3       return Integer.compare(s1.length(), s2.length());
4  }
5 }

3. 总结
通过策略模式将策略的定义、创建、使用解耦,让每一部分都不至于太复杂,也去除了if...else这样的条件判断语句,代码的可维护性和可拓展性都提高了。