状态模式 The State Pattern
状态模式
允许对象在内部状态改变时,改变它的行为,对象看起来好像修改了它的类。
(因为不同的状态,对用一个操作,有不同的处理)
1、将状态封装成独立的类,每个状态下的行为都放在各自状态的类中。
2、状态机建模:定义一个状态集合;创建用一个变量持有当前状态对象;当动作被调用时,它就被委托给当前的状态对象。
类图:
1、Context(上下文)持有一些内部状态,只要有人调用Context的request() 方法,它就会被委托到状态来处理。
2、State 接口定义了一个所有状态的共同接口,任何状态都实现这个接口,以便状态之间可以相互替换。
3、每个ConcreteState都提供了它自己对于请求的实现。
不使用状态模式 与 使用状态模式的对比
1、不使用状态模式
代码中有众多条件语句,根据不同的状态选择不同的行为
if ( state1 ) { ... }
else if ( state2 ) { ... }
else if ( state3 ) { ... }
else { ... }
2、使用状态模式
状态的转换可以由State类或Context类控制
state.handle();
状态模式与策略模式对比
状态模式:用户不会直接和状态交互,当前状态自行在状态集合中游走
策略模式:用户通常主动指定Context所要组合的策略对象时那一个。
(转载请注明出处 ^.^)