8 Strategy模式
8.1 概述
策略模式主要应用于多种方法解决一个问题中,或一个东西有多种做法,现在只选择其中一种方法,将来可能会用另一种方法。就像一道题有多种算法,需要把这些不同的算法封装起来,达到使用无差别化。
8.2 设计
这个模式类似于Bridge模式,但是Bridge模式是为了封装实现部分,Strategy模式是为了封装某个步骤的多种算法。Strategy把这些算法抽象成一个类,直接使用其子类的对象实现具体的算法。
8.3 实现
UML图:
1
using System;
2
using System.Collections ;
3
4
namespace Example
5
{
6
/// <summary>
7
/// 示例
8
/// </summary>
9
class Example
10
{
11
/// <summary>
12
/// 应用程序的主入口点。
13
/// </summary>
14
[STAThread]
15
static void Main(string[] args)
16
{
17
Context c = new Context() ;
18
c.ContextInterface() ;
19
}
20
/// <summary>
21
/// 使用策略的类
22
/// </summary>
23
public class Context
24
{
25
private Strategy s = null ;
26
public void ContextInterface()
27
{
28
s = new ConcreteStrategyB() ;//决定使用哪个策略
29
s.AlgorithmInterface() ;
30
}
31
}
32
/// <summary>
33
/// 策略抽象类,封装实现策略的接口
34
/// </summary>
35
public abstract class Strategy
36
{
37
public abstract void AlgorithmInterface() ;
38
}
39
/// <summary>
40
/// A策略
41
/// </summary>
42
public class ConcreteStrategyA : Strategy
43
{
44
public override void AlgorithmInterface()
45
{
46
Console.WriteLine( "实现A算法" ) ;
47
}
48
}
49
/// <summary>
50
/// B策略
51
/// </summary>
52
public class ConcreteStrategyB : Strategy
53
{
54
public override void AlgorithmInterface()
55
{
56
Console.WriteLine( "实现B算法" ) ;
57
}
58
}
59
/// <summary>
60
/// C策略
61
/// </summary>
62
public class ConcreteStrategyC : Strategy
63
{
64
public override void AlgorithmInterface()
65
{
66
Console.WriteLine( "实现C算法" ) ;
67
}
68
}
69
}
70
}
71

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
