标签:
定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。也就是将算法独立成类,在调用的时候动态的创建对应的类,调用其方法,从而使方法实现相对独立,再实现抽象成接口面向接口编程。
代码实现
1 public class Context 2 { 3 ITravelStategy travelStategy = null; 4 public Context(ITravelStategy sortStategy) 5 { 6 this.travelStategy = sortStategy; 7 } 8 public void Travel() 9 { 10 travelStategy.Travel(); 11 } 12 } 13 public interface ITravelStategy 14 { 15 void Travel(); 16 } 17 18 public class SelfTravel : ITravelStategy 19 { 20 21 public void Travel() 22 { 23 Console.WriteLine("自助游"); 24 } 25 } 26 public class TourTravel : ITravelStategy 27 { 28 29 public void Travel() 30 { 31 Console.WriteLine("跟团游"); 32 } 33 } 34 public class Rest : ITravelStategy 35 { 36 37 public void Travel () 38 { 39 Console.WriteLine("在家休息"); 40 } 41 }
策略模式将算法独立成对象,在调用时动态的创建。有时候会想到动态的创建,那是不是我要创建一个工厂模式根据需要制定创建的对象?这个可以有,但是这一步已经是创建的步骤了。策略模式关注的是对行为算法的封装与调用,工厂模式则是对对象的创建,这是有区别的。
当然对于策略模式将算法抽象成类,那我们是否可以直接调用创建的方法而不去创建类呢,这个也是可以的。用委托来实现,将对策略方法的调用实现成委托方法的触发,甚至写成匿名方法都是可取的,这更多的是看设计中算法使用的频次。多次多处使用,则封装成类。单次调用使用匿名方法是不错的选择。
标签:
原文地址:http://www.cnblogs.com/Joy-et/p/4847577.html