定义:
状态模式(State),当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。
一个方法过长就是代码的坏味道。这个类或者这个方法违背类“单一职责原则”。
状态模式主要解决的是当控制一个对象状态转换的体检表达式过于复杂的时的情况,把状态的判断逻辑转移到不同的状态的一系列类当中,可以把复杂的判断逻辑化。当然,如果这个判断很简单,那就没必要用“状态模式”了。
我们看到UML类图中,context类中维护者一个State的引用,也就是说,我们使用context类就可以控制State的具体实现的变化。
而具体实现类中有着传递一个Context的饮用的方法。实际上是将Context 这个对象一致传递下去。
状态模式的好处是:将与特定的状态相关的行为局部化,并且将不同状态的行为分割开来。
也就是将特定的状态相关的行为都放入一个对象中,由于所有与状态相关的代码都存在于某个ConcreaeState中,所以通过定义新的子类可以很容易地增加新的状态和转换。
说白了,这样做的目的就是为零消除庞大的条件分枝语句,大的分支判断会使得他们那一修改和扩展。就像我们门最早说的刻板印刷一样,任何改动和变化都是致命的,状态模式通过把各种状态转移逻辑分布到State的子类之间,来减少相互间的依赖。
使用场景:
当一个对象的行为取决于他的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。而状态模式也是消灭if else 的利器