模板设计模式—基于抽象类的,核心是封装算法
模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供具体实现
模板(模板方法)模式(Servlet、AQS)
在一个方法中定义一个算法的骨架,并将一些具体步骤延迟到子类中实现。 模板模式使得子类可以在不改变算法结构的基础上,重新具体定义算法中的某些步骤
讲模板设计模式之前,我们用代码来实现咖啡和茶制作的类:
1 | class Coffee { |
我们在这两个类中发现了重复代码,因此我们需要重新理一下我们的设计。
- 既然茶和咖啡是如此的相似,因此我们应该将共同的部分抽取出来,放进一个基类中。
- 从冲泡法入手。观察咖啡和茶的冲泡法我们会发现,两种冲泡法都采用了相同的算法: 将水煮沸 用热水泡饮料 把饮料倒进杯子 在饮料内加入适当的调料
实际上,浸泡(steep)和冲泡(brew)差异并不大。因此我们给它一个新的方法名称brew(),这样我们无论冲泡的是何种饮 料都可以使用这个方法。同样的,加糖、牛奶还是柠檬也很相似,都是在饮料中加入其它调料,因此我们也给它一 个通用名称addCondiments()。
1 | /** |
模板方法定义了一个算法的步骤,并允许子类为一个或者多个步骤提供具体实现
在模板设计模式下还有一种钩子用法 钩子方法是一类"默认不做事的方法" ,子类可以视情况决定要不要覆盖它们。 比如说,顾客点杯咖啡时,可以选择加不加牛奶或者糖!!!
1 | import java.util.Scanner; |
v1.5.2