状态模式,运动员比赛

本文介绍了一个基于运动员竞技状态变化的软件设计案例。通过状态模式,运动员可以在比赛中根据实际情况调整自己的竞技状态,从而达到最佳的比赛效果。文章详细展示了状态模式的具体实现,并通过一个马拉松比赛的例子进行了说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

马拉松运动员的竞技状态直接影响着比赛过程和结果。

    超常发挥时,速度为每小时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公里






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值