第5篇:框架里的模板方法:HttpServlet、JdbcTemplate、AbstractList

第5篇:框架里的模板方法:HttpServlet、JdbcTemplate、AbstractList

摘要:HttpServlet、JdbcTemplate、AbstractList 这三个你天天用的框架和类库,背后都是模板方法模式。本文拆解它们的源码设计,让你看到"固定骨架、填充细节"在实际工程中是如何落地的,从此看框架源码不再迷茫。

🔗 系列导航


本文是《Java 23 种设计模式:从踩坑到精通》模板方法模式长文的扩充短文第5篇,帮助你碎片化掌握核心知识点。

前面我们用手写代码和对比表格理解了模板方法模式,但你很可能早就用过它------只是没意识到。Java 生态中几个最常用的框架和类库,都深度依赖模板方法模式。今天盘点三个经典案例,看完你会恍然大悟:原来我一直在用模板方法。


1. Servlet:HttpServlet

这是模板方法模式最教科书级的例子。HttpServletservice()方法就是一个模板方法:

java 复制代码
// HttpServlet 源码简化示意
protected void service(HttpServletRequest req, HttpServletResponse resp) {
    String method = req.getMethod();
    if (method.equals("GET")) {
        doGet(req, resp);
    } else if (method.equals("POST")) {
        doPost(req, resp);
    } else if (...) {
        // ... 其他 HTTP 方法
    }
}

开发者只需要继承 HttpServlet,重写 doGet()doPost()等方法,完全不用关心请求解析、响应分发等底层逻辑。这就是模板方法:父类控制请求处理流程,子类填充业务逻辑。

java 复制代码
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        // 处理 GET 请求
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
        // 处理 POST 请求
    }
}

2. Spring:JdbcTemplate

Spring 中的各种 XxxTemplate类都是模板方法模式的实践。以 JdbcTemplate为例,它定义了数据库操作的固定流程:

获取连接 → 准备 Statement → 执行 SQL → 处理 ResultSet → 释放资源

开发者只需通过回调接口提供 SQL 和结果映射逻辑,其余步骤由 JdbcTemplate统一管理。

java 复制代码
jdbcTemplate.query("SELECT * FROM user WHERE id = ?",
    new Object[]{1},
    (rs, rowNum) -> new User(rs.getLong("id"), rs.getString("name"))
);

类似的还有 RestTemplate(HTTP 请求模板)、TransactionTemplate(事务模板),都是同一个套路。

3. JDK:AbstractList / AbstractSet

Java 集合框架中,AbstractList提供了一个骨架实现。子类只需实现 get(int index)size()两个抽象方法,父类就自动帮你实现了 indexOf()contains()subList()等通用方法。

java 复制代码
public class MyList extends AbstractList<String> {
    private String[] data = {"A", "B", "C"};

    @Override
    public String get(int index) {
        return data[index];
    }

    @Override
    public int size() {
        return data.length;
    }
}

// 自动获得以下功能:
myList.contains("A");   // true
myList.indexOf("B");    // 1
myList.subList(0, 2);   // [A, B]

这就是模板方法的力量:父类写好通用逻辑,子类只提供最小必要实现。


一句话总结:框架用模板方法帮你搭好架子,你只写业务逻辑。


📖 完整长文入口:本文是模板方法模式扩充系列的第5篇。如果你想一次性阅读完整内容(含UML、完整代码、框架应用、面试追问等),请查看原长文:

👉 《Java 23 种设计模式:从踩坑到精通 | 模板方法模式》

🔗 系列导航

相关推荐
AI人工智能+电脑小能手4 小时前
大白话说Java设计模式-28-模板方法模式(业务实战篇)
java·设计模式·模板方法模式·spring源码·订单系统·代码复用
leeyi7 小时前
两个 Agent 怎么协作:Host-Worker 模式(第91篇-E77)
设计模式·agent·ai编程
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-26-策略模式(业务实战篇)
java·spring·设计模式·策略模式·支付系统·算法切换
星火10241 天前
【Groovy翻译-进阶篇】Groovy 中的设计模式
后端·设计模式·groovy
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-27-策略模式(源码剖析篇)
java·spring·设计模式·策略模式·源码分析·事务管理·comparator
SL_staff1 天前
风控规则如何从硬编码解耦?我们在 JVS-Rules 中的实践与思考
java·spring boot·设计模式
小此方1 天前
Linux加餐(一):藏在Linux中的设计模式(一)策略模式与日志
linux·设计模式·策略模式
To_OC2 天前
从一行入口代码啃透 NestJS:工厂模式、装饰器和依赖注入是怎么串起来的
后端·设计模式·nestjs
东方小月2 天前
从零开发一个 Coding Agent(十二):实现版本化 JSONL 与真实 CLI 入口
前端·设计模式·前端框架
程序员贺加贝2 天前
轻制造SaaS的生产闭环建模-BOM工单领料报工质检与入库
java·设计模式·架构