State
You can think of the State design pattern as a more opinionated version of the Strategy pattern we discussed earlier in this chapter. However, there’s a crucial difference: while the Strategy pattern is typically changed from the outside by the client, the state can change internally based solely on the input it receives.
Consider this dialogue a client has with the Strategy pattern:
Client: “Here’s a new thing to do, start doing it from now on.”
Strategy: “OK, no problem.”
Client: “What I like about you is that you never argue with me.”
Now, compare it with this dialogue:
Client: “Here’s some new input I got for you.”
State: “Oh, I don’t know. Maybe I’ll start doing something differently. Maybe not.”
The client should also be prepared for the state to possibly reject some of its inputs:
Client: “Here’s something for you to...