看一本关于设计模式的书,首先翻阅其模板方法模式。一方面,模板方法模式极为基础,也包含很多设计思考;另一方面,它反映作者对设计模式的理解程度,这一章写得不好,一定是水货师傅。
【模板方法模式放在哪里讲,我一直在变来变去;因此,模板方法模式中需要讲些什么,也就时刻在变动。目前的文档结构我比较满意,决定放在第二章行为参数化中。以前我写的关于模板方法模式的一些垃圾博客,都将被删除——垃圾桶中放久了,也该倒掉了
我的思路是:从模板方法模式的使用场景为出发点。(1)通用函数, 以2.2.1求和函数为例;(2)代码向上集中——在面向对象领域,模板方法模式通常用于在各种子类已有代码的基础上,提取公共的行为并集中到父类中,以免代码重复。】
2.2.1 求和函数
这一使用模板方法模式的场景,属于功能抽象,其中模板方法实现了一个算法的框架。无论什么编程语言,都采用自己的技术对模板方法模式加以支持,所采用的技术即为C的函数指针、Scheme的高阶函数和Java的动态绑定。
因此,对于模板方法模式而言,其核心是设计出模板方法。至于描述可变部分的抽象方法如何封装,并非其要点。“将它的一些步骤延迟到子类中”不过是一种设计选项。比较Scheme语言的实现,更好的选择是行为参数化。
2.2.2 策略模式的扩展
1. 避免类型爆炸 为了避免类型爆炸问题,通常多次使用策略模式——或者说使用多重策略。模板方法模式、桥接模式、装饰模式等等均面临类型爆炸问题,所以都使用了多重策略。
2. 应对无限可能 应对无限可能的最佳选项是行为参数化
2.3.3不要教条主义
本节说明对模板方法模式的一些解释,许多地方与GoF的解释不同。
模板方法模式的意图
可变步骤如何设计
强制子类使用改进语意的改写
关于钩子方法