一、定义

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

 

二、UML图:(来自百度百科

根据上面的UML图,我们需要的类有:

1)Content类

2)Strategy抽象类

3)若干ConcreteStrategy类

 

三、写法:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 
 5 namespace StudyDesign
 6 {
 7     //抽像算法类
 8     public abstract class Strategy
 9     {
10         //算法方法
11         public abstract void AlgorithmInterface();
12     }
13    
14 
15 
16     //具体算法A
17     public class ConcreteStrategyA:Strategy
18     {
19         //算法实现
20         public override void AlgorithmInterface()
21         {
22           Console.WriteLine("算法实现A");  
23         }
24     }
25 
26 
27     //具体算法B
28     public class ConcreteStrategyB:Strategy
29     {
30         public override void AlgorithmInterface()
31         {
32             Console.WriteLine("算法实现B");  
33         }
34     }
35 
36 
37     //具体算法C
38     public class ConcreteStrategyC:Strategy
39     {
40         public override void AlgorithmInterface()
41         {
42             Console.WriteLine("算法实现C");
43         }
44     }
45 
46 
47 
48   
49     public class Content
50     {
51         private Strategy strategy;
52 
53         public Content(Strategy strategy) //构造函数
54         {
55             this.strategy = strategy;
56         }
57        
58         public void ContentInterface()  //方法
59         {
60             strategy.AlgorithmInterface();
61         }
62     }
63 
64 }

 

四、调用:

 Content content;
 content=new Content(new ConcreteStrategyA());
 content.ContentInterface();

 content=new Content(new ConcreteStrategyB());
 content.ContentInterface();

 content=new Content(new ConcreteStrategyC());
 content.ContentInterface();

 

五、特点:

1. 所有这些算法完成的都是相同的工作。只是实现不同。

2. 不用在一个大程序里if...else...了,频繁改动大程序还有风险

3. 调用者必须知道有哪些算法

 

posted on 2016-08-31 20:44  airforce094  阅读(337)  评论(1编辑  收藏  举报