동일한 동작을 객체의 상태에 따라 각각 다르게 처리해야 할 때 사용한다. 캡슐화한 객체 상태를 참조하는 방식으로 처리한다.
적용 케이스
네이트 상태를 예를 들면. 온라인,자리비움 다른 용무 중 등 상태는 변경하기 위해서는 모두 각자의 액션이 있고 상대방도 내 상태(온라인, 자리비움, 다른 용무중) 등 상태를 볼수 있다.
publicclassState {privateString value;publicStringgetValue() {return value; }publicvoidsetValue(String value) {this.value= value; }publicvoidmethod1(){System.out.println("execute the first opt!"); }publicvoidmethod2(){System.out.println("execute the second opt!"); }}
publicclassTest {publicstaticvoidmain(String[] args) {State state =newState();Context context =newContext(state);// 첫번째 상태로 설정state.setValue("온라인");context.method();// 두번째 상태로 설정state.setValue("자리비움");context.method();// 세번째 상태로 설정state.setValue("다른 용무 중");context.method(); }}