设计模式之策略模式

原文地址: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#设计模式(李建忠)
原文地址:https://www.cnblogs.com/niaowo/p/3730036.html