一、模板模式
封装了一个算法步骤,并允许子类为一个或多个步骤方法提供实现。模板模式可以使子类在不改变算法结构的情况下,重新定义算法中的某些步骤。
二、示例
泡咖啡与泡茶:
- 泡咖啡的步骤:
- 水烧开
- 冲泡咖啡粉
- 把咖啡倒入杯子
- 加糖和牛奶
- 泡茶步骤:
- 水烧开
- 冲泡茶叶
- 把茶水倒入杯子
- 加柠檬
面向对象模式的示例:
1.定义泡咖啡的方法类
1 |
|
2.定义泡茶的方法类
1 |
|
3.调用方法
1 |
|
三、模板模式
泡咖啡和泡茶的方法步骤都是固定的,只是用到的材料不同,因此可以将泡饮料的方式定义成一个固定的模板
- 1.水烧开
- 2.冲泡饮料
- 3.把饮料倒入杯子
- 4.添加附属配料
模板模式即对固定流程模式的操作进行模板化,实现固定的内部方法,抽象出具体的方法,并且可以设置动态的条件
- AbstractClass
- AbstractMethod
- ConcreteClass
- Hook
1.定义模板方法
1 |
|
2.继承模板类,重写具体的自定义方法
1 |
|
1 |
|
3.具体调用
1 |
|
模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。子类实现算法的某些细节,有助于算法的扩展。通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。
三、好莱坞原则
好莱坞原则:不要给我们打电话,我们会给你打电话
- 高层无需知道调用底层的细节,解耦
- 降低业务和框架的耦合
- 业务组件可复用,可插拔
四、总结
具体细节步骤实现定义在子类中,子类定义详细处理算法是不会改变算法整体结构。
代码复用的基本技术,在数据库设计中尤为重要。
存在一种反向的控制结构,通过一个父类调用其子类的操作,通过子类对父类进行扩展增加新的行为,符合“开闭原则”。
Java设计模式所有示例代码,持续更新中