State
Definition
Allow an object to alter its behavior when its internal state changes. The object will appear to change its class.
UML class diagram
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
Sample code in Java
package com.hong.state; interface State { public void handle(Context context); } class Context { private State state; public Context(State state) { this.state = state; } public void request(){ state.handle(this); } public void setState(State state){ this.state = state; } } class ConcreteStateA implements State{ @Override public void handle(Context context) { System.out.println("This is a message from ConcreteStateA class"); context.setState(new ConcreteStateB()); } } class ConcreteStateB implements State{ @Override public void handle(Context context) { System.out.println("This is a message from ConcreteStateB class"); context.setState(new ConcreteStateA()); } } public class State_structure { public static void main(String[] args){ Context myContext = new Context(new ConcreteStateA()); myContext.request(); myContext.request(); myContext.request(); myContext.request(); } }