一、定义
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
二、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. 调用者必须知道有哪些算法