策略模式

定义

定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。也就是将算法独立成类,在调用的时候动态的创建对应的类,调用其方法,从而使方法实现相对独立,再实现抽象成接口面向接口编程。

举例类图

代码实现

 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     }

总结

策略模式将算法独立成对象,在调用时动态的创建。有时候会想到动态的创建,那是不是我要创建一个工厂模式根据需要制定创建的对象?这个可以有,但是这一步已经是创建的步骤了。策略模式关注的是对行为算法的封装与调用,工厂模式则是对对象的创建,这是有区别的。

当然对于策略模式将算法抽象成类,那我们是否可以直接调用创建的方法而不去创建类呢,这个也是可以的。用委托来实现,将对策略方法的调用实现成委托方法的触发,甚至写成匿名方法都是可取的,这更多的是看设计中算法使用的频次。多次多处使用,则封装成类。单次调用使用匿名方法是不错的选择。

Top
收藏
关注
评论
原文地址:https://www.cnblogs.com/Joy-et/p/4847577.html