设计模式-策略模式
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. 总结标签:sort,策略,角色,ConcreteStrategy,模式,Strategy,Comparator,设计模式 From: https://www.cnblogs.com/hld123/p/17739381.html
通过策略模式将策略的定义、创建、使用解耦,让每一部分都不至于太复杂,也去除了if...else这样的条件判断语句,代码的可维护性和可拓展性都提高了。