1. 策略模式与状态模式结构几乎相同,意图差异是什么?各自的典型业务场景?
请解释策略模式与状态模式结构几乎相同但意图差异,说明各自的典型业务场景?
- 策略与状态的结构相似(都封装算法/行为可替换)
- 意图差异:策略是"可替换算法",状态是"随状态迁移的行为"
- 典型场景
- 结构相似:策略模式与状态模式都封装一组可替换的行为,通过组合 + 委托实现,客户端不直接依赖具体行为类,结构上几乎相同(都有一个 Context 持有策略/状态对象)。
- 意图差异:
- 策略模式:算法可替换,客户端主动选择用哪个策略,策略之间是"并列的算法",不关心状态迁移。目的是替换算法、消除 if-else 分支。
- 状态模式:状态驱动行为,对象的行为随"内部状态"改变而改变,状态之间有迁移关系(状态机),状态切换由状态对象自己决定。目的是让状态变化自动改变行为,消除状态判断的 if-else。
- 典型场景:策略——支付方式(支付宝/微信/银行卡)、排序算法、压缩格式;状态——订单状态机(待支付/已支付/已发货/已完成)、TCP 连接状态、电梯状态。
- 关键区别:策略由外部/客户端选择且不迁移;状态的切换由状态对象内部驱动且有明确迁移。
一句话:策略是"客户端选算法",状态是"状态机自动换行为"。结构相似但意图不同——策略并列可替换,状态有迁移关系。