原文地址:http://www.cnblogs.com/sanduo8899/p/3728288.html
概念:
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
UML结构图:
适用场景:
1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。
3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。
那么现在我们将上面的小段子用程序简单的来表示一下
类关系图:
代码:(很简单就不做注释了,Sorry~)
1 /// <summary> 2 /// Strategy类 3 /// </summary> 4 abstract class Answer 5 { 6 public abstract void GetAnswer(); 7 } 8 9 class Computer : Answer 10 { 11 public override void GetAnswer() 12 { 13 Console.WriteLine("使用计算机可以获知正确答案"); 14 } 15 } 16 class Friend : Answer 17 { 18 public override void GetAnswer() 19 { 20 Console.WriteLine("求助朋友可以获知正确答案"); 21 } 22 } 23 class Himself : Answer 24 { 25 public override void GetAnswer() 26 { 27 Console.WriteLine("凭借他自己的记忆可以获知正确答案"); 28 } 29 } 30 /// <summary> 31 /// Context类 32 /// </summary> 33 class Player 34 { 35 private Answer answer; 36 public Player(Answer answer) 37 { 38 this.answer = answer; 39 } 40 public void Operation() 41 { 42 answer.GetAnswer(); 43 } 44 } 45 46 /// <summary> 47 /// 客户端调用 48 /// </summary> 49 class 策略模式 50 { 51 public static void Main() 52 { 53 Player player = new Player(new Friend()); 54 player.Operation(); 55 Console.ReadLine(); 56 } 57 }
参考资料:
- 百度百科:策略模式
- C#设计模式(李建忠)