abstract class State { abstract public void handle(Context context); }
public class ConcreteStateA extends State{ public void handle(Context context) { context.setState(new ConcreteStateB()); } }
public class ConcreteStateB extends State { public void handle(Context context) { context.setState(new ConcreteStateA()); } }
public class Context { private State state; public Context(State state) { this.state = state; } public State getState() { return state; } public void setState(State state) { this.state = state; } public void request() { state.handle(this); } public void displayState() { System.out.println("状態は" + state.getClass().getName() + "です"); } }
public class Client { public static void main(String[] args) { Context c = new Context(new ConcreteStateA()); c.displayState(); c.request(); c.displayState(); c.request(); c.displayState(); } }
C:\JavaHello\State>java Client 状態はConcreteStateAです 状態はConcreteStateBです 状態はConcreteStateAです C:\JavaHello\State>