동일한 동작을 객체의 상태에 따라 각각 다르게 처리해야 할 때 사용한다. 캡슐화한 객체 상태를 참조하는 방식으로 처리한다.
적용 케이스
네이트 상태를 예를 들면. 온라인,자리비움 다른 용무 중 등 상태는 변경하기 위해서는 모두 각자의 액션이 있고 상대방도 내 상태(온라인, 자리비움, 다른 용무중) 등 상태를 볼수 있다.
public class State {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public void method1(){
System.out.println("execute the first opt!");
}
public void method2(){
System.out.println("execute the second opt!");
}
}
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 method() {
if (state.getValue().equals("state1")) {
state.method1();
} else if (state.getValue().equals("state2")) {
state.method2();
}
}
}
public class Test {
public static void main(String[] args) {
State state = new State();
Context context = new Context(state);
// 첫번째 상태로 설정
state.setValue("온라인");
context.method();
// 두번째 상태로 설정
state.setValue("자리비움");
context.method();
// 세번째 상태로 설정
state.setValue("다른 용무 중");
context.method();
}
}