0%

策略模式

文章字数:208,阅读全文大约需要1分钟

策略模式是将算法分离出来,在使用的时候指定使用的算法。避免大量使用if..else的设计模式。将原来由if…else判断之后获取实现类转换成实现类和值绑定,直接通过值获取类。省略了if…else

实现

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
35
36
37
38
39
40
41
42
43
44
45
46
class Client {
public static void main(String[] args) {
//选择一个具体策略
IStrategy strategy = new ConcreteStrategyA();
//来一个上下文环境
Context context = new Context(strategy);
//客户端直接让上下文环境执行算法
context.algorithm();
}

//抽象策略类 Strategy
interface IStrategy {
void algorithm();
}

//具体策略类 ConcreteStrategy
static class ConcreteStrategyA implements IStrategy {

@Override
public void algorithm() {
System.out.println("Strategy A");
}
}

//具体策略类 ConcreteStrategy
static class ConcreteStrategyB implements IStrategy {

@Override
public void algorithm() {
System.out.println("Strategy B");
}
}

//上下文环境
static class Context {
private IStrategy mStrategy;

public Context(IStrategy strategy) {
this.mStrategy = strategy;
}

public void algorithm() {
this.mStrategy.algorithm();
}
}
}

基于Spring的应用

  1. 将策略类注册成为组件

  2. 通过组件名获取组件,获取策略时传入的策略名就是组件名。