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

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.kler.cn/a/557902.html

相关文章:

  • 【Python爬虫(41)】消息队列:分布式爬虫的“智慧中枢”
  • 将产品照片(form.productPhotos)转为 JSON 字符串发送给后端
  • 学习笔记-沁恒第五讲-米醋
  • 如何在 Ubuntu 上安装和使用 Podman ?
  • Zookeeper应用案例-分布式锁-实现思路
  • My second Android application
  • CellChat前沿:spaCI:通过自适应图模型破译空间蜂窝通信
  • 位运算实用技巧与LeetCode实战
  • Linux系统使用Docker部署Geoserver并做数据挂载进行地图服务的发布和游览
  • 大模型——使用 Redis 和 Spring AI 创建 RAG(检索增强生成)应用
  • 什么是“可迭代”
  • 深入理解设计模式之外观模式
  • 《从入门到精通:蓝桥杯编程大赛知识点全攻略》(十八)-倍数问题、距离
  • MySQL | MySQL库、表的基本操作01
  • 如何对比软件需求做的是否合格?
  • nlp 自然语言处理+bert model +问答系统 question answer system(python 完整代码)
  • 豪越科技消防安全重点单位管理:从传统到数字化的跨越
  • (java/Spring boot)使用火山引擎官方推荐方法向大模型发送请求
  • editor.md编辑器,图片跨域上传,前后端分离
  • 洛谷 P1102 A-B 数对(详解)c++