马拉松运动员的竞技状态直接影响着比赛过程和结果。
超常发挥时,速度为每小时21公里;
正常发挥时,速度为每小时20公里;
失常发挥时,速度为每小时18公里。
马拉松比赛过程大约2小时,运动员不可能保持同一状态,所以优秀的运动员总能合理调节自身的竞技状态。
模式定义:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
案例分析:运动员比赛状态直接影响速度,改变状态就等于改变速度。
优点:消除代码中包含大量与对象状态有关的条件语句,状态决定行为。
注意:行为之间的特性也是状态模式和策略模式一个很重要的区别,状态模式的行为是平行性的,不可相互替换的;而策略模式的行为是平等性的,是可以相互替换的。
代码:首先定义运动员
public class Runner {
private IRunnerState state;
public void setState(IRunnerState state) {
this.state = state;
run();
}
public Runner() {
state = new NormalState();
}
public void run() {
state.run();
}
}
状态类public interface IRunnerState {
//跑步
void run();
}
正常状态public class NormalState implements IRunnerState {
@Override
public void run() {
System.out.println("正常状态时速20公里");
}
}
超常状态public class SuperNormalState implements IRunnerState{
@Override
public void run() {
System.out.println("超常状态时速21公里");
}
}
失常状态public class NotNormalState implements IRunnerState{
@Override
public void run() {
System.out.println("失常状态时速19公里");
}
}
测试public class Test {
public static void main(String args[]) {
System.out.print("比赛开始,");
Runner runner = new Runner();
runner.run();
System.out.print("比赛来中后期保存体能降速,");
runner.setState(new NotNormalState());
System.out.print("最后冲刺,");
runner.setState(new SuperNormalState());
}
}
结果比赛开始,正常状态时速20公里
比赛来中后期保存体能降速,失常状态时速19公里
最后冲刺,超常状态时速21公里