某系统需要根据用户选择的优惠规则,在满减、折扣、返券等算法之间切换;另一个系统中,订单会随着待支付、已支付、已发货、已完成等状态变化而表现出不同操作行为。前者和后者分别更适合使用()。
策略模式关注算法族的替换,客户端或上下文可以选择不同策略;状态模式关注对象内部状态变化导致行为变化,状态转换通常是核心。优惠算法切换更像策略模式,订单状态驱动行为更像状态模式。
选项分析
正确。优惠规则切换是策略模式,订单状态驱动行为是状态模式。
错误。把算法切换和状态驱动混在一起了。
错误。观察者关注一对多通知,适配器关注接口转换。
错误。装饰器关注动态增强职责,代理关注控制访问。
本题为什么容易错
策略模式和状态模式都可能出现“行为不同”,但原因不同。一个是选择了不同算法,一个是对象处于不同状态。
简短答案
策略模式和状态模式怎么区分,正确答案是 A(策略模式;状态模式)。策略模式关注算法族的替换,客户端或上下文可以选择不同策略;状态模式关注对象内部状态变化导致行为变化,状态转换通常是核心。优惠算法切换更像策略模式,订单状态驱动行为更像状态模式。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| 策略模式;状态模式 | 本题正确答案 | 正确。优惠规则切换是策略模式,订单状态驱动行为是状态模式。 | 看到题干核心场景时优先联想到它 |
| 状态模式;策略模式 | 本题干扰项 | 错误。把算法切换和状态驱动混在一起了。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 观察者模式;适配器模式 | 本题干扰项 | 错误。观察者关注一对多通知,适配器关注接口转换。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 装饰器模式;代理模式 | 本题干扰项 | 错误。装饰器关注动态增强职责,代理关注控制访问。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- 状态模式;策略模式:错误。把算法切换和状态驱动混在一起了。
- 观察者模式;适配器模式:错误。观察者关注一对多通知,适配器关注接口转换。
- 装饰器模式;代理模式:错误。装饰器关注动态增强职责,代理关注控制访问。
知识点详解
设计模式题要抓变化点。策略模式把算法封装起来,让算法可以替换;状态模式把状态封装起来,让对象在不同状态下表现不同。考试常用促销、排序、支付算法考策略;常用订单、审批、工单流转考状态。
备考速记
记法:策略是“我选哪种算法”,状态是“我现在处于什么状态”。
状态模式在状态模式场景中的作用
状态模式在本题中的核心价值,是解决“某系统需要根据用户选择的优惠规则,在满减、折扣、返券等算法之间切换;另一个系统中,订单会随着待支付、已支付、已发货、已完成等状态变化而表现出不同操作行为。前者和后者分别更适合使用()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。
同类题怎么考
- 给出状态模式场景,判断应该选择哪个概念、工具、协议或管理过程。
- 考查状态模式的作用,要求从四个相近选项中找出最符合题干目标的一项。
- 把状态模式和状态模式;策略模式、观察者模式;适配器模式、装饰器模式;代理模式放在一起考,重点看适用场景是否一致。
- 题干通常会出现一个关键动作或目标,先定位关键词,再回到选项逐一排除。
状态模式在软件设计师软考中的考法
软考选择题通常不会只考概念定义,还会把状态模式放到状态模式场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。
解题思路
判断时不要只看“行为变化”四个字。策略模式的变化点是算法选择,通常外部可以指定策略;状态模式的变化点是对象状态,行为跟着状态走。优惠规则可以换算法,订单操作则由订单状态决定。
考点定位
策略模式看“可替换算法”,状态模式看“状态改变带来行为改变”。
易错提醒
- 看到多个行为就直接选策略模式,没有判断是否由状态驱动。
- 看到状态两个字就选状态模式,但场景实际只是参数选择。
- 只背模式定义,不看题干中的变化原因。
备考提示
- 设计模式复习时,把策略、状态、观察者、装饰器、代理放在常见场景里记。
- 下午题遇到模式选择,先找变化点,再套模式名称。
- 相关专题:/guides/software-designer-afternoon-question-selection-dfd-database-uml/
你可能还想了解
- 策略模式和状态模式怎么区分?
- 状态模式是什么?
- 状态模式在软件设计师考试中怎么考?
- 软件设计师状态模式题怎么理解?
- 策略模式和状态模式区别怎么考?
- 软件设计师设计模式题怎么考?
本文小结
本题核心考点是状态模式在状态模式场景中的判断和应用。遇到类似题目时,先看题干描述的目标,再判断哪个选项最符合场景;本题应选择 A(策略模式;状态模式)。