/* Store, Caller */ public class CeilingFan { State currentState; public CeilingFan() { currentState = new Off(); } public void changeSpeed() { currentState.changeSpeed(); } public class Off implements State { State nextState; public Off() { nextState = new On(this); } public void changeSpeed() { currentState = nextState; System.out.println("off"); } } public class On implements State { State nextState; public On(State aNextState) { nextState = aNextState; } public void changeSpeed() { currentState = nextState; System.out.println("on"); } } }