敏捷软件开发 – TEMPLATE METHOD模式和STRATEGY模式
TEMPLATE METHOD模式

TEMPLATE METHOD模式展示了面向对象编程中诸多经典重用形式中的一种。其中通用算法被放置在基类中,并且通过继承在不同的具体上下文中实现该通用算法。但是这项技术是有代价的。继承是一种非常强的关系。派生类不可避免地要和它们的基类绑定在一起。
STRATEGY模式

把通用算法必须要调用的抽象方法定义在一个名为IApplication的接口中。从这个接口派生出ftocStrategy,并把它传给ApplicationRunner。之后,ApplicationRunner就可以把具体工作交给这个接口去完成。
显而易见,这个结构要优于TEMPLATE METHOD模式的结构,使用代价也高一些。STRATEGY模式比TEMPLATE METHOD模式设计更多数量的类和间接层次。ApplicationRunner中委托指针的使用招致了比继承稍微多一点的运行时间和数据空间开销。但是另一方面,如果有许多不同的应用程序要运行它,就可以重用ApplicationRunner实例,并把许多不同的Application实现传递给它,从而减小了通用算法和该算法所控制的具体细节之间的耦合。
结论
TEMPLATE METHOD模式实现和使用起来都比较简单,但是不灵活。STRATEGY模式非常灵活但是必须得多创建一个类、多实例化一个对象并把这个额外的对象配置到系统中。因此对于TEMPLATE METHOD和STRATEGY模式的选择,要看是需要STRATEGY模式的灵活性还是需要TEMPLATE METHOD模式的简单性。
摘录自:[美]RobertC.Martin、MicahMartin著,邓辉、孙鸣译 敏捷软件开发原则、模式与实践(C#版修订版) [M]、人民邮电出版社,2013、229-239、

浙公网安备 33010602011771号