定义
状态模式(State):属于行为型模式,允许对象的内部状态变化时改变其行为,使其看上去像改变自身所属类一样。
状态模式和策略模式类似,只不过状态模式更偏重于状态的自变化,策略模式强调策略的人为选择。如快递状态的变化,从打包->运输->存储;心情的变化,从生气->开心等。策略的变化如支付方法,选择微信或者支付宝,选择骑车、开车、还是步行等。
代码实战
1 | interface State { |
类图
特点
状态模式的特点是,创建一个状态接口,让各个具体状态实现该接口。客户端使用时持有这个接口,并提供一个setState的方法,去修改状态。
上面说的这些和策略模式一模一样,但是状态接口需要依赖于客户端,当某个动作执行完以后,状态可能会自动发生变化,所以需要在实现类中调用客户端的setState,修改到下一个状态。这是策略模式不具备的,但是缺点是增加了耦合,接口也依赖于客户端的实现。
总结
状态模式使用的场景不如策略常见,一般业务的状态都是手动去维护,更加容易发现和定位问题。经常就写成了策略模式,策略和状态都是需要小伙伴们掌握的重点模式。