场景:公司购买了饮料机,可以冲泡咖啡和冲泡茶两种饮料
1.定义
定义了一个操作算法框架,而将一些步骤延迟到子类中实现,使得子类在不改变一个算法结构的同时就重新定义该算法的某些特定步骤。
2.实现
模板方法一定要申明成final,不能够被复写
钩子函数(HOOK):通过抽象类或是本类中提供一个默认或者为空的实现,具体的子类可以自行决定是否挂钩以及如何挂钩。在某任务之前、之后、执行中、报异常后调用的方法(是不是有种熟悉的感觉)
3.特点
优点:①封装性好 ②复用性好 ③屏蔽细节 ④便于维护
缺点:继承只能是单个的,重构时会遇到困难
4.应用场景
①算法或操作遵循相似的逻辑
②重构时(把相同的代码抽取到父类中)
③重要、复杂的算法,核心算法设计设计为模板方法
分析场景:
饮料泡法的配置模版
(1)把水煮沸(soilwater) -共性
(2)泡饮料(brew) -个性
(3)把饮料倒进杯子(pourincup) -共性
(4)加调味料(add Condiments) -个性
实现要素:
准备一个抽象类,将部分逻辑以具体方法的形式实现,然后声明一些抽象方法交由子类实现剩余逻辑,用钩子方法给予子类更大的灵活性。最后将方法汇总构成一个不可改变的模板方法。
抽象基类:
具体子类:
行业案例:处理各种日志信息