第7篇:策略模式 vs 状态模式——别再傻傻分不清
摘要:策略模式和状态模式是面试中极容易混淆的一对。本文用对比表格和记忆口诀帮你彻底分清。
🔗 系列导航:
- 上一篇:第6篇:文件排序策略与 JDK Comparator 对比
- 下一篇:第8篇:框架应用与面试必问——策略模式收官
- 原系列总目录 🔥 订阅本专栏,不错过每一篇
本文是《Java 23 种设计模式:从踩坑到精通》策略模式长文的扩充短文第7篇,帮助你碎片化掌握核心知识点。
你有没有被这两个模式搞晕过?策略模式和状态模式,行为型模式中的“双胞胎”。两者的核心区别在于:策略由客户端决定切换,状态由状态类自己决定转换。
| 对比维度 | 策略模式 | 状态模式 |
|---|---|---|
| 目的 | 替换算法 | 根据内部状态自动改变行为 |
| 谁决定切换 | 客户端显式选择策略 | 状态类自己决定何时切换到另一个状态 |
| 关注点 | 算法的替换与组合 | 状态之间的流转和转换 |
| 上下文感知 | 策略通常不知道上下文的存在 | 状态知道上下文的存在,并可能调用上下文方法 |
| 典型应用 | Comparator、支付方式、折扣策略 | 订单状态机、线程状态、工单流转 |
举个例子帮你秒懂:
-
策略模式:你去餐厅吃饭,服务员拿来菜单(策略列表),你主动选择今天吃什么(客户端决定)。下次来你可以选不同的菜。
-
状态模式:你点了一份牛排,厨房会根据牛排的“状态”(生、半熟、全熟)自动决定下一步操作(翻面、装盘、上菜)。状态自己决定行为。
你的场景该选哪个?
| 判断标准 | 选策略模式 | 选状态模式 |
|---|---|---|
| 算法/行为由外部主动选择 | ✅ | ❌ |
| 行为随内部状态自动变化 | ❌ | ✅ |
| 需要运行时动态替换 | ✅ | ❌ |
| 状态之间有明确的转移规则 | ❌ | ✅ |
记忆口诀:策略主动选,状态被动变。
📖 完整长文入口:本文是策略模式扩充系列的第7篇。如果你想一次性阅读完整内容(含UML、完整代码、框架应用、面试追问等),请查看原长文:
👉 《Java 23 种设计模式:从踩坑到精通 | 策略模式》
🔗 系列导航:
- 上一篇:第6篇:文件排序策略与 JDK Comparator 对比
- 下一篇:第8篇:框架应用与面试必问——策略模式收官
- 返回扩充系列目录 🔥 订阅本专栏,不错过每一篇
- 原系列总目录 🔥 订阅本专栏,不错过每一篇

1328

被折叠的 条评论
为什么被折叠?



