[Java] Gof 디자인 패턴 - 상태(State)
★상태 패턴 : 상태를 객체로 나타내고, 행동을 구현한다.
★스트레터지 패턴이랑 크게 다를게 없으나 스트레터지 패턴은 알고리즘을 변경시키고, 알고리즘에서 구현된 행동이 상태에 영향을 주지는 않지만 스테이트 패턴은 어떤 이벤트로 인해 상태를 변화시키고, 상태에 영향을 준다.
★예를 들어 불이 꺼진 상태와 켜진 상태를 두고, 스위치를 눌렀을 때 일어나는 일을 상태별로 구현할 수 있다. 마치 인프런 예제처럼.
★Test
- 상태를 정의할 인터페이스를 만든다.
interface LightState {
void on();
void off();
}
- 객체의 멤버로 상태를 두고, 상태에 따라 객체의 행동을 결정하도록 구현한다.
public class Light {
protected LightState lightState;
private LightState offState = new LightState() {
@Override
public void on() {
System.out.println("Light ON");
lightState = onState;
}
@Override
public void off() {
System.out.println("Nothing");
}
};
private LightState onState = new LightState() {
@Override
public void on() {
System.out.println("Nothing");
}
@Override
public void off() {
System.out.println("Light OFF");
lightState = offState;
}
};
public Light() {
lightState = offState;
}
public void on() {
lightState.on();
}
public void off() {
lightState.off();
}
}
- 불을 껏다 켰다 해본다.
public class Main {
public static void main(String[] args) {
Light light = new Light();
light.off();
light.off();
light.off();
light.on();
light.on();
light.on();
light.off();
light.on();
light.off();
light.on();
light.off();
light.on();
}
}