状态模式是什么?
状态模式允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。
状态模式的适用范围
状态模式的典型例子就是状态机,随着状态不同,选择的行为也不一样,具体的行为根据运行时的状态决定。
采用状态模式后,可以省去一大堆条件判断语句。在状态模式中,把每种条件分支放入一个类中,处理更为灵活。
状态模式的示例
下面用电视遥控的开关状态来说明状态模式:
public interface State {
public void doAction();
}
public class TVStartState implements State {
@Override
public void doAction() {
System.out.println("TV is turned ON");
}
}
public class TVStopState implements State {
@Override
public void doAction() {
System.out.println("TV is turned OFF");
}
}
ublic class TVContext implements State {
private State tvState;
public void setState(State state) {
this.tvState=state;
}
public State getState() {
return this.tvState;
}
@Override
public void doAction() {
this.tvState.doAction();
}
}
//测试
public class TVRemote {
public static void main(String[] args) {
TVContext context = new TVContext();
State tvStartState = new TVStartState();
State tvStopState = new TVStopState();
context.setState(tvStartState);
context.doAction();
context.setState(tvStopState);
context.doAction();
}
}