知识卡片
真实项目中的状态转移是网状而非链式
内容
多数[[状态模式的定义与三个角色]]教程用TCP三状态按固定顺序循环切换作示例,这种 链式结构在真实项目中很少见。项目更常见的是网状结构:一个状态可切到多个状态,也可能被 多个状态切入(如网站用户等级可按业务规则自由升降级)。电梯的敞门/闭门/运行/停止也是 网状自由切换。发散:这揭示了教学简化陷阱——用最简单的线性案例讲模式虽然易懂,却会让 读者低估该模式处理真实网状转移的价值。
参考来源
- 位置:《设计模式之禅(第2版)》第26章《状态模式》(源文件:_epub-src/text/part0121.html)
- 结论依据:原文批评"状态间的过渡是固定的"这类简单线性案例(如TCP三状态循环)"你在项目中很少看到一个状态只能过渡到另一个状态情形,项目中遇到的大多数情况都是一个状态可以转换为几种状态",并举收费网站用户等级为例说明真实的网状切换。
- 原始内容:你在项目中很少看到一个状态只能过渡到另一个状态情形,项目中遇到的大多数情况都是一个状态可以转换为几种状态……状态B既可以切换到状态C,又可以切换到状态D,而状态D也可以切换到状态A或状态B……这才是最经常用到的状态模式。