读书笔记2:策略模式

来源:互联网 发布:阿里云个人备案照片 编辑:程序博客网 时间:2024/06/06 08:38
  策略模式:定义了算法家族,分别封装起来,让它们之间可以互相替换,
此模式让算法的变化,不会影响使用算法的客户。

    我觉得,策略模式有点类似于工厂模式:继承一个父类,不同的子类实现父类的方法都不同,然后根据需求初始化相应的子类。不同的是策略模式是针对算法的,工厂模式可以使用所有这种情况。
依然以截取网页功能为例:
截取算法父类:
      对于不同的网页截取算法不同,可以抽象一个父类,它有一个截取算法

[csharp] view plaincopyprint?
  1. public class ReadStrategeSuper  
  2.  {  
  3.    public abstract string ReadWebPage(){}  
  4.  }  

  对于第一种网页对应算法一:

[csharp] view plaincopyprint?
  1. public class ReadStratege1:ReadStrategeSuper  
  2.  {  
  3.    public overrride string ReadWebPage(){算法1;}  
  4.  }  

   对于第二种网页对应算法二:

[csharp] view plaincopyprint?
  1. public class ReadStratege2:ReadStrategeSuper  
  2. {  
  3.   public overrride string ReadWebPage(){算法2;}  
  4. }  

 ... ...
  有一个Context来决定采用哪种策略。

[csharp] view plaincopyprint?
  1. public class Context  
  2.   {  
  3.     ReadStrategeSuper readSuper;  
  4.     public Context(ReadStrategeSuper readSuper)  
  5.     {  
  6.       this.readSuper = readSuper;  
  7.     }  
  8.     public string GetResult()  
  9.     {  
  10.       return readSuper.ReadWebPage();  
  11.     }  
  12.   }  

    调用

[csharp] view plaincopyprint?
  1. main()  
  2. {  
  3.    Context context;  
  4.    第一种网页  
  5.    context = new Context(new ReadStratege1());  
  6.    string resultStr1 = context.GetResult();  
  7.      
  8.    第二种网页  
  9.    context = new Context(new ReadStratege2());  
  10.    string resultStr2 = context.GetResult();  
  11.      
  12.    ... ...  
  13. }  

    这样的好处是算法独立,易于修改维护,缺点是类太多,对于算法很多的情况,类太多管理反而不太方便。

0 0
原创粉丝点击