当前位置: 首页 > news >正文

C++ 设计模式-状态模式

火箭状态模式,涵盖发射、多级分离、入轨、返航、紧急状态等流程,以及状态间的转换逻辑:


状态设计

  1. 状态列表

    • IdleState(待机)
    • PreparingState(准备)
    • LaunchingState(发射中)
    • FirstStageSeparatingState(一级分离)
    • SecondStageSeparatingState(二级分离)
    • ThirdStageSeparatingState(三级分离)
    • OrbitingState(轨道运行)
    • ReturnPreparingState(返航准备)
    • ReturningState(返航中)
    • EmergencyState(紧急状态)
    • LandedState(着陆)
  2. 状态转换图

    Idle → Preparing → Launching → FirstStageSeparating → SecondStageSeparating → ThirdStageSeparating → Orbiting
      ↑      |               |           |                     |                       |             ↓
      |      |               |           |                     └─── EmergencyState ←───┘             |
      |      ↓               ↓           ↓                                                           ↓
      └── LandedState ←─ Returning ←─ ReturnPreparing ←──────────────────────────────────────────────┘
    

完整代码实现

#include <iostream>
#include <memory>
#include <stdexcept>

class Rocket;

// 抽象状态基类
class RocketState {
   
public:
    virtual void StartPreparation(Rocket& rocket) {
    Error("准备"); }
    virtual void StartLaunch(Rocket& rocket)      {
    Error("发射"); }
    virtual void SeparateStage(Rocket& rocket)    {
    Error("分离"); }
    virtual void EnterOrbit(Rocket& rocket)       {
    Error("入轨"); }
    virtual void ReturnToEarth(Rocket& rocket)    {
    Error("返航"); }
    virtual void HandleEmergency(Rocket& rocket)  {
    Error("紧急处理"); }
    virtual void Land(Rocket& rocket)             {
    Error("着陆"); }
    virtual ~RocketState() = default;

protected:
    void Error(const std::string& action) {
   
        std::cout << "[Error] 当前状态不支持 " << action << " 操作!\n";
    }
};

// ---------- 具体状态类 ----------
class IdleState : public RocketState {
   
public:
    void StartPreparation(Rocket& rocket) override;
};

class PreparingState : public RocketState {
   
public:
    void StartLaunch(Rocket& rocket) override;
    void HandleEmergency(Rocket& rocket) override;
};

class LaunchingState : public 

相关文章:

  • 在s32ds for platform平台debug编译能正常编译,但是切换到release编译时报错
  • DeepSeek vs ChatGPT:AI 领域的华山论剑,谁主沉浮?
  • Uniapp判断设备是安卓还是 iOS,并调用不同的方法
  • 了解大数据
  • 虚拟机的创建及配置
  • Lineageos 22.1(Android 15)Launcer简单调整初始化配置
  • Qt学习(六) 软件启动界面 ,注册表使用 ,QT绘图, 视图和窗口绘图,Graphics View绘图框架:简易CAD
  • 数据库索引:缺点与类型全解析
  • CSS 布局技术深度解析:从传统到现代的核心布局方案
  • Arm64架构CentOS7服务器搭建Fabric环境
  • RPC:分布式系统的通信桥梁
  • 毕业项目推荐:基于yolov8/yolov5/yolo11的番茄成熟度检测识别系统(python+卷积神经网络)
  • 华为S系列交换机安全加固解决方案
  • Secured Finance携手Axelar及Squid提升流动性,迎接USDFC主网
  • 宇树科技13家核心零部件供应商梳理!
  • chmod命令修改rwxr-x---只读权限为rwxr-xr-x
  • C语言学习【1】C语言关于寄存器的封装
  • 数字化营销时代,我们需要有哪些思维?
  • 深入理解指针(六)
  • 深度学习-6.用于计算机视觉的深度学习
  • 家庭医生可提前5天预约三甲医院号源,上海常住人口签约率达45%,
  • 从良渚到三星堆:一江水串起了5000年的文明对话
  • 101岁陕西省军区原司令员冀廷璧逝世,曾参加百团大战
  • 湖南慈利一村干部用AI生成通知并擅自发布,乡纪委立案
  • 乌克兰谈判代表团由12人组成,乌防长率领
  • 巴基斯坦与印度停火延长至18日