化繁为简的状态模式
2022-06-25 本文已影响0人
老瓦在霸都
最近看了同事写的一块代码,逻辑非常复杂,我们讨论了实现的方式,我建议他改用状态模式, 这样可以省去很多复杂的判断分支
这是用状态模式的做法

不用状态模式的代码大致如此
if(cpuRatio < xxx && memRatio < xxx) {
state=Normal
} else if(cpuRatio > xxx && memRatio > xxx) {
state=Busy
}
else if(cpuRatio > xxx && memRatio > xxx) {
state=Crazy
}
if(state == Crazy) {
delegateOtherDoSomething()
} else if (state == Busy) {
complainAndDoSomething()
} else if (state == Normal) {
doSomething()
} else {
doSomething();
}
而用状态模式的代码大致如此
newState = currentState.checkState();
newState.doSomething();
当然我省略了 checkState 的逻辑,该做的事其实并没有少多少,但是看起来清楚多了。
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。