Behavioral Patterns  «Prev  Next»

State Pattern

The State pattern allows an object to alter its behavior when its internal state changes. The object appears to change its class. The Figure illustrates the State Pattern.

StateContext aggregates abstract State. ConcreteStateA and ConcreteStateB inherit from abstract State.


The following lists the benefits of using the State pattern:
  1. Localizes state-specific behavior and partitions behavior for different states .
  2. Make state transitions explicit.

When to Use:

You should use the State pattern when:
  1. An object's behavior depends on its state and it must change its behavior at run-time depending on that state.
  2. Operations have large conditional statements that consist of multiple states and depend on the object's state.

The State design pattern is one of the most useful patterns of those described within the Gang of Four. Games often depend on the State pattern because objects can change states so frequently in games. The purpose of the State pattern is to allow an object to change its behavior when the state changes. Many other simulations, whether they are games or not, depend on the State pattern as well. The Figure below shows the basic design pattern in a class diagram.
State design pattern class diagram

As shown, there is no Client class. However, the GoF book says that the Context is the primary interface for the clients. When examining the pattern, think of the Client class making its request through the Context class. There is a lot to understanding and effectively using the State design pattern, so for now, just take a quick look at the class diagram; the details will be unrolled gradually.