模板方法模式是一种行为型模式,当执行某个操作的步骤基本上是固定的是,可以使用模板方法模式。
模板方法模式定义了一个算法框架,将一系列具体的操作交给子类中去实现。可以在不改变模板框架算法的情况下,灵活的扩展改变每一步的具体实现。
模板方法模式主要包括三个方面:
-
抽象类:负责定义算法框架和模板方法的实现
-
具体子类:负责首相类中各个抽象方法的具体的实现
-
模板方法:执行算法方法的顺序
举例:当我们在泡茶时,泡茶的顺序基本上都是一致的,如:烧水、拿茶叶、倒茶、等待、品茶、洗锅。可以看出,除了拿茶叶究竟是红茶还是绿茶或者是果茶不一样,其他的步骤全部相同,这时就可以使用模板方法模式了。
代码实现:
1、创建抽象类【泡茶】
public abstract class MakeTea {
public void make() {
heatWater();
this.takeTae();
pourTea();
waitTea();
drinkTea();
washPot();
}
private void pourTea() {
System.out.println("倒茶");
}
/**
* 拿茶叶要根据不同的茶拿不同的茶叶,由子类实现
**/
public abstract void takeTae();
private void heatWater() {
System.out.println("烧水");
}
private void waitTea() {
System.out.println("等待");
}
private void drinkTea() {
System.out.println("喝茶");
}
private void washPot() {
System.out.println("洗锅");
}
}
2、创建具体的子类,泡花茶或者绿茶
public class MakeGreenTea extends MakeTea{
@Override
public void takeTae() {
System.out.println("去拿绿茶");
}
}
public class MakeFlowerTea extends MakeTea{
@Override
public void takeTae() {
System.out.println("去拿花茶");
}
}
3、测试
public static void main(String[] args) {
//准备泡花茶
MakeFlowerTea flowerTea = new MakeFlowerTea();
flowerTea.make();
System.out.println("=================");
//准备泡绿茶
MakeGreenTea greenTea = new MakeGreenTea();
greenTea.make();
}
//测试结果
烧水
去拿花茶
倒茶
等待
喝茶
洗锅
=================
烧水
去拿绿茶
倒茶
等待
喝茶
洗锅
Process finished with exit code 0
总之,模板方法模式适用于当算法的基本骨架已经确定,但某些特定步骤的实现可能会在子类中发生变化的场景,它能通过抽象出模板方法来封装算法过程,并通过抽象方法延迟到子类中实现特定步骤,从而提高代码的重用性和扩展性。