软件设计师 · 高频练习

策略模式和状态模式怎么区分?

中级 单选题 第 639 题 中等 软件设计师设计模式策略模式状态模式
题目

某系统需要根据用户选择的优惠规则,在满减、折扣、返券等算法之间切换;另一个系统中,订单会随着待支付、已支付、已发货、已完成等状态变化而表现出不同操作行为。前者和后者分别更适合使用()。

A 策略模式;状态模式
B 状态模式;策略模式
C 观察者模式;适配器模式
D 装饰器模式;代理模式
题目类型:原创高频考点题 用途:用于帮助理解软件设计师相关考点和答案解析,不等同于官方真题。
书木兰刷题练习 适合懒人、小白的刷题通关平台
正确答案
A
答案解析

策略模式关注算法族的替换,客户端或上下文可以选择不同策略;状态模式关注对象内部状态变化导致行为变化,状态转换通常是核心。优惠算法切换更像策略模式,订单状态驱动行为更像状态模式。

选项分析

A

正确。优惠规则切换是策略模式,订单状态驱动行为是状态模式。

B

错误。把算法切换和状态驱动混在一起了。

C

错误。观察者关注一对多通知,适配器关注接口转换。

D

错误。装饰器关注动态增强职责,代理关注控制访问。

本题为什么容易错

策略模式和状态模式都可能出现“行为不同”,但原因不同。一个是选择了不同算法,一个是对象处于不同状态。

先看结论

简短答案

策略模式和状态模式怎么区分,正确答案是 A(策略模式;状态模式)。策略模式关注算法族的替换,客户端或上下文可以选择不同策略;状态模式关注对象内部状态变化导致行为变化,状态转换通常是核心。优惠算法切换更像策略模式,订单状态驱动行为更像状态模式。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
策略模式;状态模式 本题正确答案 正确。优惠规则切换是策略模式,订单状态驱动行为是状态模式。 看到题干核心场景时优先联想到它
状态模式;策略模式 本题干扰项 错误。把算法切换和状态驱动混在一起了。 看到该词不要急着选,先判断是否真正解决题干问题
观察者模式;适配器模式 本题干扰项 错误。观察者关注一对多通知,适配器关注接口转换。 看到该词不要急着选,先判断是否真正解决题干问题
装饰器模式;代理模式 本题干扰项 错误。装饰器关注动态增强职责,代理关注控制访问。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 状态模式;策略模式:错误。把算法切换和状态驱动混在一起了。
  • 观察者模式;适配器模式:错误。观察者关注一对多通知,适配器关注接口转换。
  • 装饰器模式;代理模式:错误。装饰器关注动态增强职责,代理关注控制访问。
复习

知识点详解

设计模式题要抓变化点。策略模式把算法封装起来,让算法可以替换;状态模式把状态封装起来,让对象在不同状态下表现不同。考试常用促销、排序、支付算法考策略;常用订单、审批、工单流转考状态。

备考速记

记法:策略是“我选哪种算法”,状态是“我现在处于什么状态”。

状态模式在状态模式场景中的作用

状态模式在本题中的核心价值,是解决“某系统需要根据用户选择的优惠规则,在满减、折扣、返券等算法之间切换;另一个系统中,订单会随着待支付、已支付、已发货、已完成等状态变化而表现出不同操作行为。前者和后者分别更适合使用()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 给出状态模式场景,判断应该选择哪个概念、工具、协议或管理过程。
  • 考查状态模式的作用,要求从四个相近选项中找出最符合题干目标的一项。
  • 把状态模式和状态模式;策略模式、观察者模式;适配器模式、装饰器模式;代理模式放在一起考,重点看适用场景是否一致。
  • 题干通常会出现一个关键动作或目标,先定位关键词,再回到选项逐一排除。
状态模式在软件设计师软考中的考法

软考选择题通常不会只考概念定义,还会把状态模式放到状态模式场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。

解题思路

判断时不要只看“行为变化”四个字。策略模式的变化点是算法选择,通常外部可以指定策略;状态模式的变化点是对象状态,行为跟着状态走。优惠规则可以换算法,订单操作则由订单状态决定。

考点定位

策略模式看“可替换算法”,状态模式看“状态改变带来行为改变”。

易错提醒

  • 看到多个行为就直接选策略模式,没有判断是否由状态驱动。
  • 看到状态两个字就选状态模式,但场景实际只是参数选择。
  • 只背模式定义,不看题干中的变化原因。

备考提示

  • 设计模式复习时,把策略、状态、观察者、装饰器、代理放在常见场景里记。
  • 下午题遇到模式选择,先找变化点,再套模式名称。
  • 相关专题:/guides/software-designer-afternoon-question-selection-dfd-database-uml/

你可能还想了解

  • 策略模式和状态模式怎么区分?
  • 状态模式是什么?
  • 状态模式在软件设计师考试中怎么考?
  • 软件设计师状态模式题怎么理解?
  • 策略模式和状态模式区别怎么考?
  • 软件设计师设计模式题怎么考?

本文小结

本题核心考点是状态模式在状态模式场景中的判断和应用。遇到类似题目时,先看题干描述的目标,再判断哪个选项最符合场景;本题应选择 A(策略模式;状态模式)。