总结:状态模式其实就是把对象的各种状态抽离出去成为一组相互独立可互相替换的对象,各个状态中满足条件则执行当前行为,不满足则转入下一个状态。
类似于策略模式,不过策略模式是客户指定当前执行某一策略,状态模式是默认执行某一状态,然后在状态中判断不符合要求就自动转下一个状态。
优点:避免了if else判断,维护起来方便,扩展起来方便,符合单一原则。
缺点:环境类和状态类互相依赖;各个条件分散成不同的类,看起来不直观,并且如果有新的状态加入,需要修改最后的状态类(改动很小)。不过比起庞大的条件语句块,这些缺点都可以忽略。