객체의 내부 상태에 따라 스스로 행동을 변경할 수 있게 허가하는 패턴, 이렇게 하면 객체는
마치 자신의 클래스를 바꾸는 것처럼 보입니다.
public interface State {
void on_button(Light light);
void off_button(Light light);
}
public class ON implements State {
@Override
public void on_button(Light light) {
//light.setState(new Sleep());
}
@Override
public void off_button(Light light) {
light.setState(new OFF());
}
}
public class OFF implements State {
@Override
public void on_button(Light light) {
light.setState(new ON());
}
@Override
public void off_button(Light light) {
}
}
//추가
public class Sleep implements State {
@Override
public void on_button(Light light) {
light.setState(new ON());
}
@Override
public void off_button(Light light) {
light.setState(new OFF());
}
}
public class Light {
private State state;
public Light() {
state = new OFF();
}
public void setState(State state) {
this.state = state;
}
public void on_button() {
state.on_button(this);
}
public void off_button() {
state.off_button(this);
}
}