知识卡片
具体状态类内部触发状态切换的实现方式
内容
[[状态模式的定义与三个角色]]中状态过渡的实现:ConcreteState持有Context引用,某 动作导致状态改变时,先setLiftState切换目标状态,再委托新状态执行该动作;不合法动作则 空实现。Context把各状态预建为静态常量,open/close等只是委托当前状态对象。发散:这把 状态转移图分散编码在各状态类方法体里——想知道某状态能转到哪,只需看该类本身,无需读 集中状态机。
参考来源
- 位置:《设计模式之禅(第2版)》第26章《状态模式》(源文件:_epub-src/text/part0119.html)
- 结论依据:原文展示OpenningState.close()方法内部先`super.context.setLiftState(Context.closeingState)`切换状态、再`super.context.getLiftState().close()`把动作委托给新状态执行,Context类通过静态常量持有四个具体状态实例。
- 原始内容:状态修改……动作委托为CloseState来执行……Context是一个环境角色,它的作用是串联各个状态的过渡,在LiftSate抽象类中我们定义并把这个环境角色聚合进来,并传递到子类……自己根据环境来决定如何进行状态的过渡。