State Design Pattern in Java
State lets an object change its behavior when its internal state changes. Each state is its own class.
Real life example
A traffic light: red, green and yellow behave differently and follow each other in order.
When to use
An object has many states and big if-else or switch blocks are making the code hard to read.
Complete Java example
Save this as Main.java, then run javac Main.java and java Main.
public class Main {
public static void main(String[] args) {
TrafficLight light = new TrafficLight();
System.out.println(light.state.color()); // RED
light.change();
System.out.println(light.state.color()); // GREEN
}
}
interface State {
void next(TrafficLight light);
String color();
}
class Red implements State { public void next(TrafficLight l) { l.state = new Green(); } public String color() { return "RED"; } }
class Green implements State { public void next(TrafficLight l) { l.state = new Yellow(); } public String color() { return "GREEN"; } }
class Yellow implements State { public void next(TrafficLight l) { l.state = new Red(); } public String color() { return "YELLOW"; } }
class TrafficLight {
State state = new Red();
void change() { state.next(this); }
}Output
RED
GREEN