定义:允许对象在内部状态改变是改变它的行为(将状态封装为类,并将动作委托到待变当前状态的对象),对象看起来好像修改了它的类。
类图:
状态模式的类图与策略模式一样,只是各自的意图不同。
状态模式,将一群行为封装在状态对象中,context的行为随时委托给那些状态对象中的一个。当前状态在所有状态对象中改变,从而反映context的内部状态,context的行为也跟着改变。调用context对象的客户对状态对象是不可见的。
状态模式是防止在context中出现许多条件判断语句,而是将行为封装到状态对象,context改变状态,进而改变context的行为(context会将行为委托给当前状态对象)。
策略模式,调用context的客户主动指定context所需组合的策略对象是哪个。
使用状态模式通常会产生大量类,但是封装变化,易于扩展,只需要继承state接口,然后实现对应的行为即可。