状态模式
状态模式定义:
英文定义:The State Pattern allows an object to alter its behavior when its internal state changes. The object will appear to change its class.
中文定义:当一个对象的内在状态改变时同意改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的推断逻辑转移到表示不同状态的一系列类中,能够把复杂的推断逻辑简化。
状态模式UML类图例如以下(摘自《Head First Design Pattern》):
有没有发现和策略模式的类图及其类似。事实上状态模式和策略模式是一对孪生兄弟,其形式全然一致。仅仅是使用意图不一样而已。
状态模式适用场景:
1. 一个对象的行为取决于它的状态,而且它必须在执行时刻依据状态改变它的行为
2. 一个操作中含有庞大的多分支结构,而且这些分支决定于对象的状态。
以下看一个演示样例,以灯的开关状态为例:
public class Light {
private LightState state;
public Light(LightState state)
{
this.state = state;
}
public LightState getState() {
return state;
}
public void setState(LightState state) {
this.state = state;
}
public void PressSwich()
{
state.PressSwich(this);
}
}
public interface LightState {
void PressSwich(Light light);
}
public class LightOn implements LightState {
@Override
public void PressSwich(Light light) {
light.setState(new LightOff());
System.out.println("关灯了...");
}
}
public class LightOff implements LightState {
@Override
public void PressSwich(Light light) {
light.setState(new LightOn());
System.out.println("灯打开了...");
}
}
public class Application {
public static void main(String[] args) {
Light light = new Light(new LightOff());
light.PressSwich();
light.PressSwich();
}
}