馬拉松運動員的競技狀態直接影響着比賽過程和結果。
超常發揮時,速度爲每小時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公里