状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况。把状态的判断逻辑转移到不同状态的一系列类当中,就可以把复杂的判断逻辑简化。我们可以把状态模式理解成为一个状态机。
状态模式的好处是将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。将特定的状态相关的行为都放入一个对象中,由于所有与状态相关的代码都存在于某个ConcreteState中,所以通过定义新的子类可以很容易地增加新的状态和转换。状态模式通过把各种状态转移逻辑分布到State子类之间,减少相互间的依赖。
把如上这个糟糕的程序改成状态模式的代码如下:其中Context的fun方法,里面使用了多态,根据具体的State是那种类型,来动态的调用那种State中的处理代码。处理代码通常包含了处理代码和状态转移的代码。