状态模式总结篇java
状态模式总结篇,咱们将从如下几个方面对状态模式进行总结。ide
状态模式出现的意图是什么?spa
经过对象内部状态发生改变进而来改变对象的行为,对象看起来好像是被修改了同样。如,没有糖果的时候(是一个状态),糖果机就不能运行了,有糖果以后(另外一个状态),投币就能够出糖果了。设计
本文出处凯哥Java(kaigejava)讲《23种设计模》系列教程种的《状态模式总结篇》orm
凯哥公众号:凯哥Java对象
凯哥我的博客:www.kaigejava.com教程
主要解决的问题是什么?接口
对象的行为依赖于对象的状态变化(属性变动),而且根据属性值(状态)的改变而改变相关的行为。如,出不出糖果这个行为受糖果机里面有没有糖果和有没有投币这两个状态影响而改变的。博客
何时或者是什么场景下使用状态模式?it
在咱们的程序代码中包含和不少与对象状态有关的条件语句(如if……else……或者是switch等)的时候,就可使用状态模式
如何实现状态模式?
将代码中的各类具体的状态抽象到一个类中。这样就有了状态类抽象对象。
使用状态模式的关键点是什么?
须要和命令模式进行区分。命令模式的接口中,一般状况下只有一个方法,而状态模式的接口中有一个或者多个方法。还有一个不一样的地方就是,状态模式的时候其实现类的方法通常是返回一个值或者是改变变量的值的。这是由于,状态模式通常和对象的状态有关。
状态模式的优缺点:
优势:
1:对状态转换规则进行了封装;
2:可使用枚举类,枚举出全部可能的状态。可是须要在枚举状态以前肯定状态的种类;
3:扩展性好。将全部与某个或者某些状态有关的行为放到了一个类对象中,这样方便管理,而且能够方便的新增状态,只须要改变对象状态就能够实现改变对象行为了;
4:代码简洁好维护。状态模式容许状态转换逻辑和状态对象合为一体,而不是一个巨大的条件语句块;
5:可让多个不一样的环境对象共享一个状态的对象,这样减小系统中对象的数量。
缺点:
1:增长对象和系统类的个数;
2:结构与实现比较复杂,若是使用不当,可能会形成程序结构和代码给人感受很混乱的;
3:对开闭原则支持很差。
使用状态模式须要注意事项:
在行为受到状态约束的时候,使用状态模式,并且须要注意的是:状态最好不要超过5个