知识卡片
switch判断状态的三个问题
内容
电梯开/关/运行/停止四个动作各有前置条件,最直接实现是每个方法内加switch(state) 判断当前状态是否合法。这有三个问题:类过长(每个方法重复状态判断);扩展性差(新增状态 要改所有switch分支,违反开闭原则);非常规状态难表达(如检修特殊规则会让判断失控)。 发散:多方法都要重复判断”当前状态能不能做这件事”,就是该用状态模式的信号——状态该被 提升为独立对象。
参考来源
- 位置:《设计模式之禅(第2版)》第26章《状态模式》(源文件:_epub-src/text/part0119.html)
- 结论依据:原文分析用switch判断电梯状态的实现,指出"电梯实现类Lift有点长""扩展性非常差劲……与开闭原则相违背""非常规状态无法实现……一个类有且仅有一个原因引起类的变化,单一职责原则……使得我们这个电梯类产生了修改"。
- 原始内容:电梯实现类Lift有点长……扩展性非常差劲……这与开闭原则相违背……非常规状态无法实现……虽然这些都是电梯的业务逻辑,但是一个类有且仅有一个原因引起类的变化,单一职责原则。