《设计模式Design Pattern》读书笔记之十九

来源:互联网 发布:新闻资讯类数据分析 编辑:程序博客网 时间:2024/04/28 10:30

《设计模式Design Pattern》读书笔记之十九

Strategy模式

结构

 

目的

当一个对象的某个/某些行为有多种算法的时候,不是通过内部的switch/if等方法,也不是通过派生子类的方法,而是把算法放到一个个单独的对象(有共同的接口)里面。这样,算法的切换只要更换相应的算法对象就可以,达到很大的灵活性。

 

讨论

1,  Strategy可以有层次继承结构,达到把共同的算法统一提取出来的目的。

2,  使用哪个strategy是由client决定/选择的,context不需要知道具体应该使用哪个strategy

3,  由于各个strategy使用共同的接口,因此context传递给strategy的参数可能是冗余的。另外一种办法是传递context本身的指针/引用给strategy,由strategy来决定使用context的哪些信息,但缺点是增加了strategycontext的依赖性,context也需要提供相应的接口来提供各种信息。

4,  如果可以的话,可以设计strategyFlyweight,这样strategy可以被共享,达到减少对象个数的目的。

5,  context也可以自己本身有一个缺省的算法,只有在client确实设定了一个strategy给它的时候才使用strategy对象。

 

 

 

参考资料

Design Pattern  Gang-Of-4  1997