= State Pattern =
객체를 상태로 표현하여 그 상태를 변화시켜 행위를 변경.
{{tag>Architecture Modeling Design_Pattern Behavioral}}
전등을 On, Off 상태로 전환한다고 가정.
= State =
public interface State {
void turnOn(Light light);
void turnOff(Light light);
}
== ConcreteState ==
public enum OnState implements State {
INSTANCE; // Singleton
@Override
public void turnOn(Light light) {
System.out.println("Already turned on.");
}
@Override
public void turnOff(Light light) {
light.setState(OffState.INSTANCE);
System.out.println("Turned off!");
}
}
public enum OffState implements State {
INSTANCE;
@Override
public void turnOn(Light light) {
light.setState(OnState.INSTANCE);
System.out.println("Turn on!");
}
@Override
public void turnOff(Light clock) {
System.out.println("Already turned off.");
}
}
= Context =
State 전환을 하는 주체
public class Light {
private State state;
public Light() {
setState(OffState.INSTANCE);
}
public void setState(State state) {
this.state = state;
System.out.println(state.getClass().getName());
}
public void turnOn() {
this.state.turnOn(this);
}
public void turnOff() {
this.state.turnOff(this);
}
}
= Client =
public class Client {
public static void main(String... args) {
Light light = new Light();
light.turnOff();
light.turnOn();
light.turnOn();
light.turnOff();
}
}
designpattern.flyweight.OffState
Already turned off.
designpattern.flyweight.OnState
Turn on!
Already turned on.
designpattern.flyweight.OffState
Turned off!