方便维护。将容易产生问题的 if-else 语句删除了,如果把每个状态的行为都放到一个类中,每次调用方法时都要判断当前是什么状态,不但会产出很多 if-else 语句,而且容易出错
缺点:
会产生很多类。每个状态都对应一个类,当状态过多时,维护难度变大
状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱
状态模式对"开闭原则"的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态,而且修改某个状态类的行为也需修改对应类的源代码。
适用环境:
行为随状态改变而改变的场景
条件、分支语句的代替者