[JAVA] 상태패턴

2021. 5. 21. 23:34·JAVA
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
'JAVA' 카테고리의 다른 글
  • [JAVA] Enum
  • [JAVA] GC의 종류
  • [JAVA] Builder 패턴
  • [JAVA] 상속 / 컴포지션
집한구석
집한구석
  • 집한구석
    tgyun615.info
  • 전체
    오늘
    어제
    • 카테고리 (183)
      • JAVA (38)
      • SPRING (15)
      • KOTLIN (23)
      • NETTY (1)
      • DEVOPS (3)
      • DOCKER (7)
      • KUBERNETES (2)
      • JAVASCRIPT (1)
      • SPLUNK (3)
      • ELK (7)
      • KAFKA (2)
      • GO (4)
      • ALGORITHM & DATA STRUCTURE (9)
      • IDE (5)
      • OS (16)
      • NETWORK (14)
      • GCP (2)
      • AWS (2)
      • DATABASE (10)
      • CLEANCODE (7)
      • OTHER (12)
  • 최근 글

  • 태그

    SQL
    엘라스틱서치
    프로그래머스
    AWS
    클린코드
    이펙티브 코틀린
    cleancode
    Kafka
    코틀린
    JPA
    splunk
    go
    IntelliJ
    자바
    docker
    Spring
    이펙티브코틀린
    java
    Elk
    ElasticSearch
  • 링크

    • github
    • linkedin
    • resume
  • hELLO· Designed By 정상우. v4.10.3
집한구석
[JAVA] 상태패턴
상단으로

티스토리툴바