[面试题] 策略模式和模板方法模式有什么区别?
📖 版块 A:知识讲解版 (温故知新)
-
策略模式:
- 把一组可以互相替换的算法或处理逻辑抽象出来。
- 运行时根据场景选择不同策略。
- 核心是“同一目标,多种实现,可自由切换”。
-
模板方法模式:
- 在父类里定义好整体流程骨架。
- 把某些可变步骤留给子类实现或覆写。
- 核心是“主流程固定,局部步骤可变”。
-
关键区别:
- 策略模式偏组合,通过注入不同策略实现变化。
- 模板方法偏继承,通过子类覆写局部步骤实现变化。
- 策略更适合算法可替换,模板方法更适合流程骨架稳定。
🎤 版块 B:面试实战版 (高手逐字稿)
Q:策略模式和模板方法模式有什么区别?
💬 高手逐字稿:
策略模式和模板方法模式,表面上都在解决“业务流程里有变化”的问题,但它们处理变化的方式完全不同。
策略模式的核心是:把一组可以互相替换的算法抽出来,然后在运行时根据场景切换。它更适合那种“同一件事情有多种做法”的场景,比如不同支付方式、不同定价策略、不同路由规则。
而模板方法模式的核心是:把整体流程骨架固定在父类里,只把少数可变步骤留给子类去覆写。它更适合那种“主干流程稳定,但局部细节会变化”的场景,比如统一的数据导出流程,不同导出类型只改其中几个步骤。
如果做一个最直观的区分:
- 策略模式更像“给你多个方案,运行时选一个”;
- 模板方法更像“流程我已经定好了,你只需要填几个空”。
从实现角度看,策略模式更偏组合,因为上下文持有一个策略接口;模板方法更偏继承,因为它通常靠父类定义骨架、子类覆写步骤。
所以实际怎么选,关键看你的变化在哪里:
- 如果变化的是整块算法,优先考虑策略;
- 如果变化的是固定流程中的局部步骤,优先考虑模板方法。
最后更新于: