当前位置: 首页 > 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 
http://www.dtcms.com/a/30933.html

相关文章:

  • 在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.用于计算机视觉的深度学习
  • CPU封装形式解析:从传统到先进封装的技术演进
  • hotkey的学习
  • 深度学习在图像识别中的应用-以花卉分类系统为例
  • Microsoft 365 Copilot中使用人数最多的是哪些应用
  • 聊聊 FocusSearch/focus_mcp_sql:Text2SQL 的新玩法
  • Word文档中插入的图片不能完整显示
  • LeetCode 热题 100_搜索二维矩阵(64_74_中等_C++)(二分查找)(暴力破解法;Z字形查找;一次二分查找)
  • 第8章:LangChain检索增强生成RAG--2.4Advanced RAG【高级RAG】
  • windows怎样查看系统信息(处理器等)
  • QSplashScreen --软件启动前的交互