状态模式
对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。
个人观点:状态模式可能是应用中比较冷门的一种模式,也有可能是我对面向对象的理解不深入。
主类中以状态对象作为属性(当前的状态)。并且主类实现方法去切换状态,本质是该方法调用主类的属性(状态对象)的切换方法。
当然,状态类需提供方法进行状态间的流转以及当前状态的行为。
状态模式相当于将我们平时一大串的if(x){...}elseif(y){...}elseif(z){...}else{} 语句,变为一个个的状态对象进行控制。
原本的分支语句变成通过类来实现,代码量肯定会剧增。
涉及流转状态的修改的时候(例如往中间插入一个新的状态),需增加新的状态类并修改新状态的前一个状态的 状态流转语句。
好处在于 分支之间 解耦了,e.g. 往A->B->C->D的C和D之间插入C2,无需再关注A->B->C的流转,只需要知道C2的前者是C,后者是D。不关注A->B->C的状态流转后,其行为也就可以直接掠过。越是能从宏观上语义性理解的代码,可读性越强。
写于2021-05-22