第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 策略模式——Strategy

策略模式——Strategy

时间:2019-08-02 11:27:17

相关推荐

策略模式——Strategy

意图:

定义一系列算法,把它们一个个封装起来,并且使它们可互相替换。该模式使得算法可独立于使用它的客户而变化。

——《设计模式》GoF

code

1 using System;

2

3 namespace DoFactory.GangOfFour.Strategy.Structural

4 {

5 /// <summary>

6 /// MainApp startup class for Structural

7 /// Strategy Design Pattern.

8 /// </summary>

9 class MainApp

10 {

11/// <summary>

12/// Entry point into console application.

13/// </summary>

14static void Main()

15{

16 Context context;

17

18 // Three contexts following different strategies

19 context = new Context(new ConcreteStrategyA());

20 context.ContextInterface();

21

22 context = new Context(new ConcreteStrategyB());

23 context.ContextInterface();

24

25 context = new Context(new ConcreteStrategyC());

26 context.ContextInterface();

27

28 // Wait for user

29 Console.ReadKey();

30}

31 }

32

33 /// <summary>

34 /// The 'Strategy' abstract class

35 /// </summary>

36 abstract class Strategy

37 {

38public abstract void AlgorithmInterface();

39 }

40

41 /// <summary>

42 /// A 'ConcreteStrategy' class

43 /// </summary>

44 class ConcreteStrategyA : Strategy

45 {

46public override void AlgorithmInterface()

47{

48 Console.WriteLine(

49 "Called ConcreteStrategyA.AlgorithmInterface()");

50}

51 }

52

53 /// <summary>

54 /// A 'ConcreteStrategy' class

55 /// </summary>

56 class ConcreteStrategyB : Strategy

57 {

58public override void AlgorithmInterface()

59{

60 Console.WriteLine(

61 "Called ConcreteStrategyB.AlgorithmInterface()");

62}

63 }

64

65 /// <summary>

66 /// A 'ConcreteStrategy' class

67 /// </summary>

68 class ConcreteStrategyC : Strategy

69 {

70public override void AlgorithmInterface()

71{

72 Console.WriteLine(

73 "Called ConcreteStrategyC.AlgorithmInterface()");

74}

75 }

76

77 /// <summary>

78 /// The 'Context' class

79 /// </summary>

80 class Context

81 {

82private Strategy _strategy;

83

84// Constructor

85public Context(Strategy strategy)

86{

87 this._strategy = strategy;

88}

89

90public void ContextInterface()

91{

92 _strategy.AlgorithmInterface();

93}

94 }

95 }

说明:源代码来自DoFactory

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。