本文共 1129 字,大约阅读时间需要 3 分钟。
我觉得,策略模式有点类似于工厂模式:继承一个父类,不同的子类实现父类的方法都不同,然后根据需求初始化相应的子类。不同的是策略模式是针对算法的,工厂模式可以使用所有这种情况。
依然以截取网页功能为例: 截取算法父类: 对于不同的网页截取算法不同,可以抽象一个父类,它有一个截取算法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(); ... ... }
这样的好处是算法独立,易于修改维护,缺点是类太多,对于算法很多的情况,类太多管理反而不太方便。
转载地址:http://aexfa.baihongyu.com/