Robert C. Martin的“Agile Software Development:Principles,patterns,Practices”中关于Template Method模式和Strategy模式的比较。
1. 书中给出了一个滥用Template Method模式的例子,并不是Template Method模式本身不好,而是由于冒泡排序这个算法放在基类里实现,由其派生类实现具体算法步骤,不是一个好主意,因为对这个算法本身在具体实现(对排序类型)由派生类来实现,但是确无法应对冒泡这个算法本身的变动(QuickBubbleSorter)这种情况,于是这个模式的实现就变成了对模式的滥用。
2. 相反使用继承加大了算法步骤和具体实现方法两个可变因素的耦合,违反了DIP原则:高层模块和底层模块之间应该使用接口隔离。
3. 从这个例子中可以看出:Template Method模式适合使用在抽象的通用算法基本结构极少会发生改变的情况,而Strategy模式则适用在算法基本结构较易发生变化而实现步骤具有多种实现的情形,因此Strategy模式抽象的难度较大,并且隔离二者的接口的设计尤为重要。