http://en.wikipedia.org/wiki/State_pattern
스테이트 패턴을 이용하면 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있다. 마치 객체 클래스가 바뀌는 것과 같은 결과를 얻을 수 있다.
Strategy pattern과의 차이점
state pattern은 상태 객체의 일련의 행동이 캡슐화 됨
strategy pattern은 일반적으로 클라이언트에서 컨택스트 객체한테 어떤 전략 객체를 사용할지를 지정해 중
interface Statelike { void writeName(StateContext context, String name); } class StateLowerCase implements Statelike { @Override public void writeName(final StateContext context, final String name) { System.out.println(name.toLowerCase()); context.setState(new StateMultipleUpperCase()); } } class StateMultipleUpperCase implements Statelike { /** Counter local to this state */ private int count = 0; @Override public void writeName(final StateContext context, final String name) { System.out.println(name.toUpperCase()); /* Change state after StateMultipleUpperCase's writeName() gets invoked twice */ if(++count > 1) { context.setState(new StateLowerCase()); } } }