狀態模式,運動員比賽

馬拉松運動員的競技狀態直接影響着比賽過程和結果。

    超常發揮時,速度爲每小時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公里






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章