策略模式
概念:它定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
代码:
1 //抽象算法类 2 abstract class Strategy 3 { 4 //算法方法 5 public abstract void AlgorithmInterface(); 6 }
//具体算法A class ConcreteStrategyA:Strategy { //算法A实现方法 pulibc ovveride void AlgorithmInterface() { Console.WriteLine("算法A实现"); } }
1 //具体算法B 2 class ConcreteStrategyB:Strategy 3 { 4 //算法A实现方法 5 pulibc ovveride void AlgorithmInterface() 6 { 7 Console.WriteLine("算法B实现"); 8 } 9 }
1 //具体算法C 2 class ConcreteStrategyC:Strategy 3 { 4 //算法A实现方法 5 pulibc ovveride void AlgorithmInterface() 6 { 7 Console.WriteLine("算法C实现"); 8 } 9
1 //上下文 2 3 Class Context 4 { 5 Strategy strategy; 6 public Context(Strategy strategy) 7 { 8 this.strategy=strategy; 9 } 10 public void ContextInterface() 11 { 12 strategy.AlgorithmInterface(); 13 } 14 }
客户端代码
1 客户端代码 2 static void Main(string[] args) 3 { 4 Context context; 5 context=new Context(new ConcreteStrageA()); 6 context.ContextInterface(); 7 }
结构图:
优点:减少了各种算法类与使用算法类之间的耦合,解决了简单工厂模式中维护或扩展算法必须改动工厂方法类的缺点;简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。
缺点:选择所用具体实现的职责由客户端对象承担,并转给策略模式的Context对象
浙公网安备 33010602011771号