/* Store, Caller */ public class CeilingFan { State currentState; public CeilingFan() { currentState = new Off(); } public void changeSpeed() { currentState.changeSpeed(); } public class HighSpeed implements State { State nextState; public HighSpeed() { nextState = new Off(); } public void changeSpeed() { currentState = nextState; System.out.println("off"); } } public class LowSpeed implements State { State nextState; public LowSpeed() { nextState = new MediumSpeed(); } public void changeSpeed() { currentState = nextState; System.out.println("medium speed"); } } public class MediumSpeed implements State { State nextState; public MediumSpeed() { nextState = new HighSpeed(); } public void changeSpeed() { currentState = nextState; System.out.println("high speed"); } } public class Off implements State { State nextState; public Off() { nextState = new LowSpeed(); } public void changeSpeed() { currentState = nextState; System.out.println("low speed"); } } }