객체가 특정 상태에 따라 행위를 달리 하는 상황에서,
자신이 직접 상태를 체크하여 상태에 따라 행위를 호출하지 않고,
상태를 객체화하여 상태가 행동을 할 수 있도록 위임하는 패턴이다.
Tv 전원버튼을 예로들면
꺼져있는 상태에서 누르면 켜지고,
켜져있는 상태에서 누르면 꺼지듯이
그 상태마다 실행시 할 일과 함께 하나하나 모듈화해서 지정해둘 때 쓰인다.
package state;
public class MyProgram{
public static void main(final String[] args)
{
final ModeSwtich modeSwitch = new ModeSwitch();
ModeSwitch.onSwitch(); //"FROM LIGHT TO DARK" 출력
ModeSwitch.onSwitch(); //"FROM DARK TO LIGHT" 출력
ModeSwitch.onSwitch(); //"FROM LIGHT TO DARK" 출력
ModeSwitch.onSwitch(); //"FROM DARK TO LIGHT" 출력
}
}
package state;
public class ModeSwitch{
private ModeState modeState = new ModeStateLight();
public void setState (ModeState _modeState)
{
modeState = _modeState;
}
public void onSwitch()
{
modeState.toggle(this);
}
}
package state;
public interface ModeState{
public void toggle (ModeSwitch modeSwitch);
}
class ModeStateLight implements ModeState {
public void toggle (ModeSwitch modeSwitch)
{
System.out.println("FROM LIGHT TO DARK"); //어둡게
modeSwitch.setState ( new ModeStateDark());
}
}
class ModeStateDark implements ModeState {
public void toggle (ModeSwitch modeSwitch)
{
System.out.println("FROM DARK TO LIGHT"); //밝게
modeSwitch.setState ( new ModeStateLIGHT());
}
}