当对象状态转换的条件过于复杂时,把状态定义成一系列类,并将状态的判断逻辑转移各个类当中。
举个栗子,12 点时切换到状态 B,否则为状态 A:
1.Player 类维护一个 State 变量作为当前状态。
2.定义 State 抽象状态类。包含一个 Handle 方法 ,该方法接受一个 Player 参数。
3.创建 ConcreteStateA 和 ConcreteStateB ,继承 State。
3.1ConcreteStateA
public void Handle(Player p){
if(当前是 12 点){
p.state = new ConcreteStateB();
}
}
3.2ConcreteStateB
public void Handle(Player p){
if(当前不是 12 点){
p.state = new ConcreteStateA();
}
}