JAVA 的模板方法模式解析

模板方法是什么?

  • 模板方法模式(Template Method Pattern)是一种行为型设计模式。相当于父类定流程,子类补细节。也就是说,父类定义好“做事的流程”(算法骨架),具体每一步怎么做由子类决定。

生活举例

  • 例如你去吃“套餐”:早餐套餐 = 主食 + 饮料,但主食和饮料的内容可以换(包子+豆浆、面包+咖啡)。
  • 这就像模板方法模式:套餐的流程是固定的(父类模板方法)-> 准备主食() + 准备饮料()。然而每家早餐店可以决定细节(子类具体实现),包子店:准备包子 + 豆浆西式店:准备面包 + 咖啡

代码举例

// 抽象父类:定义流程
abstract class Breakfast {
    // 模板方法:定义算法骨架
    public final void makeBreakfast() {
        prepareMain();
        prepareDrink();
        System.out.println("早餐准备好了!\n");
    }

    // 留给子类实现的步骤
    protected abstract void prepareMain();
    protected abstract void prepareDrink();
}

// 子类1:包子豆浆店
class ChineseBreakfast extends Breakfast {
    protected void prepareMain() {
        System.out.println("准备包子");
    }
    protected void prepareDrink() {
        System.out.println("准备豆浆");
    }
}

// 子类2:西式早餐店
class WesternBreakfast extends Breakfast {
    protected void prepareMain() {
        System.out.println("准备面包");
    }
    protected void prepareDrink() {
        System.out.println("准备咖啡");
    }
}

// 测试
public class Main {
    public static void main(String[] args) {
        Breakfast chinese = new ChineseBreakfast();
        Breakfast western = new WesternBreakfast();
        chinese.makeBreakfast();
        western.makeBreakfast();
    }
}

输出结果

准备包子
准备豆浆
早餐准备好了!

准备面包
准备咖啡
早餐准备好了!

关键点

  • 核心思想:父类定义算法骨架,子类实现具体步骤
  • 优点:提高复用性符合开闭原则(父类不动,子类扩展)
  • 缺点:父类改抽象方法时,所有子类都要改
  • 应用场景:一套流程相同,但部分步骤不同的情况
  • 典型例子:Servletservice() 调用 doGet() / doPost()
    • Servlet 一般继承 HttpServlet,但父类原本的方法中仅仅是定义了doGet() 和 doPost() 方法,这些需要自定义的Servlet中进行重写实现

总结

  • 模板方法模式就是 固定流程 + 灵活步骤。父类规定“框架怎么走”,子类决定“细节怎么做”
posted @ 2025-10-10 18:02  阿俊学编程  阅读(19)  评论(0)    收藏  举报