首页 > 代码库 > State

State

定义

  状态模式属于对象的行为模式。

  状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。这个模式将状态封装成为单独的类,并将动作委托到代表当前状态的对象。  

  一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的对象。

 

结构和角色

  

  抽象状态(State)角色 : 定义一个接口,用以封装环境对象的一个特定的状态所对应的行为。  

  具体状态(ConcreteSate)角色 : 每一个具体状态类都实例了环境的一个状态所对应的行为。

  环境(Context)角色 : 保留各种具体状态对象,和定义当前状态对象。 此类的行为委派给具体State对象。

 

什么时候使用状态模式 

   一个对象的行为依赖于它所处的状态,对象的行为必须随着其状态的改变而改变。

  对象在某个方法里依赖一重或多重的条件转移语句。状态模式把条件转移语句的每一个分支都包装到一个单独的类里。

 

应用

   状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时,系统便改变所选的子类。所有与一个特定的状态有关的行为都被包装到一个特定的对象里面,使得行为的定义局域化。

  状态改变,不必采用过程性的处理方式,来改变行为。

 

优缺点

  便于维护和扩展,遵守开闭原则,

  缺点是,会造成大量的小的状态类。

 

 这个模式的结构图和策略模式的结构图是一样的,不过他们的意图不一样。

   环境角色是否有明显的状态和状态的过渡。如果环境角色只有一个状态, 那么应当使用策略模式。

   策略模式,一旦环境角色选择了一个具体策略类,那么在整个环境类的生命周期里它都不会改变这个具体策略类。

   状态模式,环境角色有明显的状态转移,在环境类的生命周期里面,会有几个不同的状态对象被使用。