[디자인 패턴] State Pattern

서동수·2023년 2월 5일
0

객체의 상태에 따라 메소드의 행위가 다른 위임 패턴이에요.
공통 인터페이스를 가지고 각각의 상태는 분리시켜 표현해 사용해요.

아래 예시코드는 이해를 돕기위해 간단하게 쓰여진 의사코드 입니다 :)

interface State {
  attack()
  zoomOn(sniper: sniper)
  zoomOff(sniper: sniper)
}

class zoomOnMode extends State {
  attack() // 정밀 공격
  zoomOn() // 줌이 켜진 상태로 아무런 동작도 하지 않는다.
  zoomOff(sniper) { // 줌이 꺼진다.
    sniper.setState(new zoomOffMode())
  }
}

class zoomOffMode extends State {
  attack() // 대충 공격
  zoomOn(sniper) { // 줌이 켜진다.
    sniper.setState(new zoomOnMode())
  }
  zoomOff() // 줌이 꺼진 상태로 아무런 동작도 하지 않는다.
}

class Sniper {
  constructor() {
    this.state = new zoomOffMode()
  }
  
  setState(state) {
    this.state = state
  }
  
  acticve() {
    this.state.zoomOn();
  }
  
  inActive() {
    this.state.zoomOff();
  }
}

sniper = new Sniper();

sniper.attack() // 대충 공격

sniper.zoomOn() // 줌이 켜진다.
sniper.zoomOn() // 줌이 켜진 상태로 아무런 동작도 하지 않는다.

sniper.attack() // 정밀 공격

sniper.zoomOff() //줌이 꺼진다.

sniper.attack() // 대충 공격
profile
devLog

0개의 댓글