设计模式之状态模式 总结篇

  • 2019 年 10 月 4 日
  • 筆記

状态模式总结篇

状态模式总结篇,我们将从以下几个方面对状态模式进行总结。

状态模式出现的意图是什么?

通过对象内部状态发生改变进而来改变对象的行为,对象看起来好像是被修改了一样。如,没有糖果的时候(是一个状态),糖果机就不能运行了,有糖果之后(另一个状态),投币就可以出糖果了。

本文出处凯哥Java(kaigejava)讲《23种设计模》系列教程种的《状态模式总结篇》

主要解决的问题是什么?

对象的行为依赖于对象的状态变化(属性变更),并且根据属性值(状态)的改变而改变相关的行为。如,出不出糖果这个行为受糖果机里面有没有糖果和有没有投币这两个状态影响而改变的。

什么时候或者是什么场景下使用状态模式?

在我们的程序代码中包含和很多与对象状态有关的条件语句(如if……else……或者是switch等)的时候,就可以使用状态模式

如何实现状态模式?

将代码中的各种具体的状态抽象到一个类中。这样就有了状态类抽象对象。

使用状态模式的关键点是什么?

需要和命令模式进行区分。命令模式的接口中,通常情况下只有一个方法,而状态模式的接口中有一个或者多个方法。还有一个不同的地方就是,状态模式的时候其实现类的方法一般是返回一个值或者是改变变量的值的。这是因为,状态模式一般和对象的状态有关。

状态模式的优缺点:

优点:

1:对状态转换规则进行了封装;

2:可以使用枚举类,枚举出所有可能的状态。但是需要在枚举状态之前确定状态的种类;

3:扩展性好。将所有与某个或者某些状态有关的行为放到了一个类对象中,这样方便管理,并且可以方便的新增状态,只需要改变对象状态就可以实现改变对象行为了;

4:代码简洁好维护。状态模式允许状态转换逻辑和状态对象合为一体,而不是一个巨大的条件语句块;

5:可以让多个不同的环境对象共享一个状态的对象,这样减少系统中对象的数量。

缺点:

1:增加对象和系统类的个数;

2:结构与实现比较复杂,如果使用不当,可能会造成程序结构和代码给人感觉很混乱的;

3:对开闭原则支持不好。

使用状态模式需要注意事项:

在行为受到状态约束的时候,使用状态模式,而且需要注意的是:状态最好不要超过5个