模板方法模式(面试版)
一、面试常考点
1. 模板方法模式解决什么问题
定义流程骨架,把可变步骤延迟到子类或配置实现。
2. 与策略模式区别
模板方法强调“流程固定,步骤可变”;策略强调“整体算法可替换”。
3. 常见追问
哪些步骤应该固化,哪些步骤应该开放。
二、细节介绍
1. 核心思想
不变流程上收,可变细节下放。
2. 优点
复用流程、降低重复代码、保证主流程一致性。
3. 代价
流程过早固化会降低灵活性。
三、示例代码
class BuildPipeline {
run() {
this.install()
this.test()
this.build()
this.deploy()
}
install() {
console.log('install deps')
}
test() {
throw new Error('test() must be implemented')
}
build() {
console.log('build artifacts')
}
deploy() {
throw new Error('deploy() must be implemented')
}
}
class FrontendPipeline extends BuildPipeline {
test() {
console.log('run unit tests')
}
deploy() {
console.log('deploy to cdn')
}
}
new FrontendPipeline().run()
四、常用应用场景
1. CI/CD 流水线
步骤稳定但实现因项目而异。
2. 页面渲染流程
固定生命周期中挂接不同业务步骤。
3. 数据处理流程
统一“读取-清洗-转换-输出”骨架。
五、高频追问标准答法(Q/A)
1. Q: 模板方法容易带来什么问题
A: 基类越来越臃肿,继承层级过深后维护成本上升。
2. Q: 什么时候优先模板方法
A: 业务流程高度稳定,且多个实现仅在局部步骤不同。