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();
    }
}