DEV Community

eidher
eidher

Posted on • Edited on

State Pattern

Allow an object to alter its behavior when its internal state changes. The object will appear to change its class.

Alt Text

Participants

  • Context: defines the interface of interest to clients Maintains an instance of a ConcreteState subclass that defines the current state.
  • State: defines an interface for encapsulating the behavior associated with a particular state of the Context.
  • Concrete State: each subclass implements a behavior associated with a state of Context

Code

public class Main { public static void main(String[] args) { Context c = new Context(new ConcreteStateA()); c.request(); c.request(); c.request(); c.request(); } } public interface State { void handle(Context context); } public class ConcreteStateA implements State { @Override public void handle(Context context) { context.setState(new ConcreteStateB()); } } public class ConcreteStateB implements State { @Override public void handle(Context context) { context.setState(new ConcreteStateA()); } } public class Context { private State state; public Context(State state) { setState(state); } public State getState() { return state; } public void setState(State state) { this.state = state; System.out.println("State: " + state.getClass().getSimpleName()); } public void request() { state.handle(this); } } 
Enter fullscreen mode Exit fullscreen mode

Output

State: ConcreteStateA State: ConcreteStateB State: ConcreteStateA State: ConcreteStateB State: ConcreteStateA 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)