객체의 상태에 따라 메소드의 행위가 다른 위임 패턴이에요.
공통 인터페이스를 가지고 각각의 상태는 분리시켜 표현해 사용해요.
아래 예시코드는 이해를 돕기위해 간단하게 쓰여진 의사코드 입니다 :)
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() // 대충 공격