首页 > 代码库 > 设计模式-策略模式

设计模式-策略模式

策略模式:定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响使用算法的客户。

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


      对于不同的网页截取算法不同,可以抽象一个父类,它有一个截取算法

 public class ReadStrategeSuper  {    public abstract string ReadWebPage(){}  }

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

 public class ReadStratege1:ReadStrategeSuper  {    public overrride string ReadWebPage(){算法1;}  }

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

  public class ReadStratege2:ReadStrategeSuper  {    public overrride string ReadWebPage(){算法2;}  }

 有一个Context来决定采用哪种策略(类似于工厂)。

public class Context  {    ReadStrategeSuper readSuper;    public Context(ReadStrategeSuper readSuper)    {      this.readSuper = readSuper;    }    public string GetResult()    {      return readSuper.ReadWebPage();    }  }

    调用

  main()  {     Context context;     第一种网页     context = new Context(new ReadStratege1());     string resultStr1 = context.GetResult();          第二种网页     context = new Context(new ReadStratege2());     string resultStr2 = context.GetResult();          ... ...  }

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

设计模式-策略模式