JAVA

[JAVA] 상태패턴

집한구석 2021. 5. 21. 23:34
728x90

정의

  • 상태를 객체화하여 상태가 행동을 할 수 있도록 위임하는 패턴
  • 상태 클래스들을 인터페이스로 캡슐화 하여, 인터페이스를 호출하는 방식

사용하는 경우

  • 객체 동작이 상태에 의존하는 경우
  • 오브젝트 상태에 따라 여러 부분의 조건문이 있는 경우

예시

/* 캡슐화 인터페이스 정의 */
public interface MonitorState {
  public void checkState();
}

/* 상태클래스 정의 */
public class Normal implements MonitorState {

  @Override
  public void checkState() {
    System.out.println("정상상태 확인");
  }
}

/* 상태클래스 정의 */
public class Warning implements MonitorState {

  @Override
  public void checkState() {
    System.out.println("경고상태 확인");
  }
}

public class Monitor {

  private MonitorState monitorState;

  public Monitor() {
    this.monitorState = new Normal();
  }

  public void setMonitorState(MonitorState monitorState) {
    this.monitorState = monitorState;
  }

  public void checkState() {
    monitorState.checkState();
  }
}

public class Main {

  public static void main(String[] args) {
    Monitor monitor = new Monitor();
    monitor.setMonitorState(new Normal());
    monitor.checkState();
    monitor.setMonitorState(new Warning());
    monitor.checkState();
    
    /* 결과 : 정상상태확인 -> 경고상태확인 */
    
  }
}

전략패턴하고 차이가 큰 차이가 없이 유사하다, 단지 용도의 차이

'JAVA' 카테고리의 다른 글

[JAVA] Enum  (0) 2021.06.02
[JAVA] GC의 종류  (0) 2021.05.23
[JAVA] Builder 패턴  (0) 2021.05.16
[JAVA] 상속 / 컴포지션  (0) 2021.05.15
[JAVA] static 정리  (0) 2021.05.15