在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。

在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。



结构图

设计模式行为型:状态模式(StatePattern)_java

结角色与理解

  • 状态模式共分为三种角色:

    • Context(上下文环境):将自身的状态与行为分离出去,封装成状态类,持有抽象状态类的引用,根据自身属性变换更换具体状态类。

    • State(抽象状态类):具体状态类的抽象,可以持有上下文环境的引用来更换状态。

    • Concrete State(具体状态类):实现不同状态下的不同行为。

  • 上下文环境引用抽象状态类完成行为的调用,状态类的状态变化可以有上下文环境处理,也可以由状态类处理。

  • 状态类可以共享,像开关对象一样,可以被多个上下文环境引用。

核心代码

抽象状态类

设计模式行为型:状态模式(StatePattern)_java_02

具体状态类

设计模式行为型:状态模式(StatePattern)_java_03状态类

设计模式行为型:状态模式(StatePattern)_java_04

客户端

设计模式行为型:状态模式(StatePattern)_java_05