维基百科

策略模式

策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。
策略模式:

  • 定义了一族算法(业务规则);
  • 封装了每个算法;
  • 这族的算法可互换代替(interchangeable)。

Java

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//StrategyExample test application

class StrategyExample {

public static void main(String[] args) {

Context context;

// Three contexts following different strategies
context = new Context(new FirstStrategy());
context.execute();

context = new Context(new SecondStrategy());
context.execute();

context = new Context(new ThirdStrategy());
context.execute();

}

}

// The classes that implement a concrete strategy should implement this

// The context class uses this to call the concrete strategy
interface Strategy {

void execute();

}

// Implements the algorithm using the strategy interface
class FirstStrategy implements Strategy {

public void execute() {
System.out.println("Called FirstStrategy.execute()");
}

}

class SecondStrategy implements Strategy {

public void execute() {
System.out.println("Called SecondStrategy.execute()");
}

}

class ThirdStrategy implements Strategy {

public void execute() {
System.out.println("Called ThirdStrategy.execute()");
}

}

// Configured with a ConcreteStrategy object and maintains a reference to a Strategy object
class Context {

Strategy strategy;

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

public void execute() {
this.strategy.execute();
}

}

运行结果:

1
2
3
Called FirstStrategy.execute()
Called SecondStrategy.execute()
Called ThirdStrategy.execute()