State Pattern

정의

동일한 동작을 객체의 상태에 따라 각각 다르게 처리해야 할 때 사용한다. 캡슐화한 객체 상태를 참조하는 방식으로 처리한다.

적용 케이스

네이트 상태를 예를 들면. 온라인,자리비움 다른 용무 중 등 상태는 변경하기 위해서는 모두 각자의 액션이 있고 상대방도 내 상태(온라인, 자리비움, 다른 용무중) 등 상태를 볼수 있다.

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();
	}
}

Last updated