The State Pattern [HFDP]
What is the State Pattern?
- It allows an object to alter its behavior when the internal state changes
- The object will appear to change its class
How Does It Work?
- A State interface is created that has all the actions the main class needs.
- A concrete class is created for each state the system can be in (implementing the State)
- Each state knows when a state change happens and sets the container's state class to the new state (object)
- The container always calls state.method()
- The states have to have a reference to the container since they changed its State
State Vs Strategy
- User of context in state isn't aware of state objects
- User of Strategy specifies objects to change the algorithm
- Strategy is a more flexible alternative to subclassing (changing the composition changes the behavior)
- State is an alternative to using conditionals
Context Transitions Vs State Transitions
-
You can decouple the states from the Context by having the Context choose the next state
- If Transitions are fixed, put in Context
- If Transitions are dynamic, put in state (state knows the Transition to the next state)
Do States Maintain State?
- No, they choose Transitions
- This means contexts can share the same strategies