模板方法模式
2019-04-04 本文已影响0人
贝贝ovo
学习路线
菜鸟教程模板方法模式
模板方法模式(Template Method) - 最易懂的设计模式解析
总结

应用场景
- 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现;
- 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复;
- 实例:炒菜,倒油、热油、翻炒是公共的行为,下什么菜,下什么调料是可变的
扩展
钩子方法
UML中,抽象类增加needStep4方法,默认返回false。增加step4实现方法。在算法结构最后增加
if(needStep4()){
step4();
}
子类重写needStep4方法,来控制step4方法的调用。
当然needStep4也可以通过构造器/setter方法把这个flag暴露给应用层,增加拓展性
注意
一般模板方法都加上 final 关键词。
在算法结构上(Process),在复用共同的方法上(step1)
相关设计模式
-
工厂方法是模板方法的一种特殊实现;
-
模板方法模式和策略模式都有封装算法;
策略模式,使不同的算法可以相互替换,不影响客户端的使用;(大量ifelse时考虑 )模板方法是针对定义一个算法的流程,而将一些不一样的流程交给子类实现,不改变算法的流程的,而策略模式可以改变算法的流程,并且它们之间是可以相互替换的
源码
jdk中AbstractList,AbstractSet,AbstractMap 即为算法结构