0%

策略模式

策略模式

定义一组算法,将每个算法封装起来,使它们之间可以互换,此模式让算法的变化,不会影响到使用算法的客户,用于分离算法,选择实现

核心概念

  • Strategy 策略接口
  • ConcreteStrategy 具体的策略实现
  • Context 上下文,负责和具体的策略类交互
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
* 策略接口
* @author zh
* @date 2022/10/16 17:22
*/
public interface Strategy {
void algorithms();
}

public class ConcreteStrategyA implements Strategy{
@Override
public void algorithms() {
System.out.println("ConcreteStrategyA");
}
}

public class ConcreteStrategyB implements Strategy{
@Override
public void algorithms() {
System.out.println("ConcreteStrategyB");
}
}

public class Context {
private Strategy strategy;

public Context(Strategy strategy){
this.strategy = strategy;
}

public void contextInterface(){
strategy.algorithms();
}
}

优缺点

优点

  • 策略类实现自同一个抽象,所以策略类之间可以自由切换
  • 易于扩展,增加一个新的策略比较简单

缺点

  • 策略类过多不容易维护
  • 必须对客户端暴露所有的策略类,使用哪种策略是由客户端来决定的

使用场景

  • 同个算法,在很多不同的实现的情况下,可以使用策略模式
  • 许多相关的类,仅仅是行为有差别的情况,可以使用策略模式
  • 有一个定义了很多行为的类,并且是通过多个if-else来选择这些行为的情况下,可以使用策略模式

欢迎关注我的其它发布渠道