模板方法模式

用做菜来理解设计模式之:模板方法模式(附代码示例)

一、一句话理解

模板方法模式就像炒菜的标准化流程:师傅规定好炒菜的步骤(热油→放主材→放调料→装盘),但允许徒弟根据不同的菜调整放主材和调料的细节。

二、生活场景类比

假设你要开一家饮品店:

  1. 所有饮品的制作流程都是:烧水→冲泡→倒杯→加料
  2. 咖啡需要"冲泡咖啡粉"和"加牛奶",奶茶需要"冲泡茶包"和"加珍珠"
  3. 老板制定标准流程卡(模板),员工根据具体饮品填空

三、代码示例(Java版)

java 复制代码
// 模板类
abstract class Beverage {
    // 模板方法(final防止子类修改流程)
    public final void prepareRecipe() {
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

    void boilWater() {
        System.out.println("烧开水");
    }

    abstract void brew(); // 必须实现的抽象方法

    void pourInCup() {
        System.out.println("倒入杯子");
    }

    abstract void addCondiments(); // 必须实现的抽象方法
}

// 具体实现
class Coffee extends Beverage {
    void brew() {
        System.out.println("冲泡咖啡粉");
    }

    void addCondiments() {
        System.out.println("加入牛奶和糖");
    }
}

class Tea extends Beverage {
    void brew() {
        System.out.println("浸泡茶包");
    }

    void addCondiments() {
        System.out.println("加入柠檬");
    }
}

四、模式结构图解

复制代码
[抽象类]
└── 模板方法(固定流程)
    ├── 具体步骤1(已实现)
    ├── 抽象步骤2(子类实现)
    ├── 具体步骤3(已实现)
    └── 抽象步骤4(子类实现)

五、面试考点总结

  1. 核心思想:定义算法骨架,延迟步骤实现
  2. 关键实现:抽象类 + final模板方法 + 抽象方法/钩子方法
  3. 使用场景:
    • 多个类有相同算法流程,但部分步骤不同
    • 需要控制子类扩展范围时(如Spring的JdbcTemplate)
  4. 优点:
    • 代码复用率提高60%+
    • 便于维护(修改模板即可影响所有子类)
  5. vs 策略模式:
    • 模板方法用继承(流程相同,步骤不同)
    • 策略模式用组合(完全替换算法)

六、实际应用案例

Spring框架的JdbcTemplate:

  1. 固定流程:获取连接→创建语句→执行SQL→处理异常→释放连接
  2. 开发者只需实现:
    • RowMapper(结果集映射)
    • PreparedStatementSetter(参数设置)

记住这个模式的关键词:流程标准化,步骤个性化,父类掌控大局,子类专注细节。就像麦当劳的操作手册,保证全球口味一致,但允许不同地区调整配料比例。

相关推荐
miss_you12134 天前
策略模式 + 模板方法 + 注册式工厂 统一设计方案(营销优惠场景示例)
设计模式·工厂方法模式·策略模式·模板方法模式
张小洛17 天前
Spring JDBC源码解析:模板方法模式的优雅实践
数据库·spring·模板方法模式·spring jdbc
bkspiderx1 个月前
C++设计模式之行为型模式:模板方法模式(Template Method)
c++·设计模式·模板方法模式
o0向阳而生0o1 个月前
108、23种设计模式之模板方法模式(17/23)
设计模式·模板方法模式
TechNomad3 个月前
设计模式:模板方法模式(Template Method Pattern)
设计模式·模板方法模式
qq_435139573 个月前
【1】策略模式 + 模板方法模式的联合应用
策略模式·模板方法模式
CHEN5_023 个月前
【CouponHub项目开发】使用RocketMQ5.x实现延时修改优惠券状态,并通过使用模板方法模式重构消息队列发送功能
java·重构·模板方法模式·项目
小蜗牛在漫步3 个月前
23种设计模式-模板方法模式
设计模式·模板方法模式
快乐非自愿3 个月前
掌握设计模式--模板方法模式
java·设计模式·模板方法模式
CoderIsArt3 个月前
模板方法模式 (Template Method Pattern)
模板方法模式