状态模式也是一种行为型模式,当我们的程序中需要一些状态转换,对于不同的状态需要不同的行为时,我们就可以考虑使用状态模式。
下面用交通灯来当例子。我们需要红黄绿三种颜色的状态。
interface State {
void show();
}
class RedState implements State {
@Override
public void show() {
System.out.println("交通灯变红了");
}
}
class YellowState implements State {
@Override
public void show() {
System.out.println("交通灯变黄了");
}
}
class GreenState implements State {
@Override
public void show() {
System.out.println("交通灯变绿了");
}
}
然后需要交通灯,它作为状态类的环境,内部应该有所有状态类的实例,并能按照某种规则转换状态。
public class TrafficLight {
private State redState = new RedState();
private State yellowState = new YellowState();
private State greenState = new GreenState();
private State current = greenState;
public void turn() {
if (current == greenState) {
current = yellowState;
current.show();
} else if (current == yellowState) {
current = redState;
current.show();
} else {
current = greenState;
current.show();
}
}
}
然后客户类不需要关心内部状态的变化,就可以使用状态类了。
public void run() {
TrafficLight light = new TrafficLight();
light.turn();
light.turn();
light.turn();
light.turn();
}