An inappropriate code implementation:
public class StateMain { // state interface State beginState; State endState; public void begin(){ beginState.begin(); } public void end(){ endState.end(); } public State getBeginState() { return beginState; } public void setBeginState(State beginState) { this.beginState = beginState; } public State getEndState() { return endState; } public void setEndState(State endState) { this.endState = endState; } } public class BeginState implements State{ private StateMain stateMain; public BeginState(StateMain stateMain) { this.stateMain = stateMain; } @Override public void begin() { System.out.println("Start Status"); // Delegate the state to another class for execution stateMain.setEndState(stateMain.getEndState()); } @Override public void end() { System.out.println("Start Status"); } }