《设计模式Design Pattern》读书笔记之十九
Strategy模式
结构
目的
当一个对象的某个/某些行为有多种算法的时候,不是通过内部的switch/if等方法,也不是通过派生子类的方法,而是把算法放到一个个单独的对象(有共同的接口)里面。这样,算法的切换只要更换相应的算法对象就可以,达到很大的灵活性。
讨论
1, Strategy可以有层次继承结构,达到把共同的算法统一提取出来的目的。
2, 使用哪个strategy是由client决定/选择的,context不需要知道具体应该使用哪个strategy。
3, 由于各个strategy使用共同的接口,因此context传递给strategy的参数可能是冗余的。另外一种办法是传递context本身的指针/引用给strategy,由strategy来决定使用context的哪些信息,但缺点是增加了strategy对context的依赖性,context也需要提供相应的接口来提供各种信息。
4, 如果可以的话,可以设计strategy为Flyweight,这样strategy可以被共享,达到减少对象个数的目的。
5, context也可以自己本身有一个缺省的算法,只有在client确实设定了一个strategy给它的时候才使用strategy对象。
参考资料
《Design Pattern》 Gang-Of-4 1997