一、基本概念
- 模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern)。在一个抽象类中定义了执行它的方法的模板,它的子类可以按需要重写方法实现,但调用该将以抽象类中定义的方式进行。
- 模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。
- 这种类型的设计模式属于行为型模式
二、案例
- 制作豆浆的步骤都一样,但是每个步骤的内容不一样。可以通过模板方法模式实现
public abstract class SoyaMilk {
public void make() {
select();
soak();
add();
beat();
}
abstract void select();
abstract void soak();
abstract void add();
abstract void beat();
}
public class RedBeanSoyaMilk extends SoyaMilk {
@Override
public void select() {
System.out.println("挑选上好的红豆");
}
@Override
public void soak() {
System.out.println("浸泡红豆一段时间");
}
@Override
public void add() {
System.out.println("将红豆添加到研磨器");
}
@Override
public void beat() {
System.out.println("开始研磨红豆");
}
}
public class BlackBeanSoyaMilk extends SoyaMilk {
@Override
public void select() {
System.out.println("挑选上好的黑豆");
}
@Override
public void soak() {
System.out.println("浸泡黑豆一段时间");
}
@Override
public void add() {
System.out.println("将黑豆添加到研磨器");
}
@Override
public void beat() {
System.out.println("开始研磨黑豆");
}
}
public class Client {
public static void main(String[] args) {
SoyaMilk soyaMilk = new RedBeanSoyaMilk();
soyaMilk.make();
soyaMilk = new BlackBeanSoyaMilk();
soyaMilk.make();
}
}
三、模板方法模式的钩子方法
- 在模板方法模式的父类中,定义一个方法,默认不做任何事情,子类可以视情况要不要覆盖它,覆盖它之后,模板就会跟着修改。该方法叫做钩子。
四、总结
- 基本思想:算法只存在在父类,容易修改。修改算法的时候,只需要修改父类的模板方法或者已经实现的某些步骤,子类就会继承。
- 一般模板方法都会加上final关键字,防止子类重写模板方法。
- 使用场景:当要完成某个过程,该过程要执行的一系列步骤,这一系列步骤基本相同,但其个别步骤在实现时可能不同,通常考虑用模板方法来处理。